hamamah has asked for the wisdom of the Perl Monks concerning the following question:

How to send an array, from client to server,row by row using a tcp connection

Replies are listed 'Best First'.
Re: array & tcp socket
by ambrus (Abbot) on Sep 25, 2004 at 11:52 UTC
Re: array & tcp socket
by eXile (Priest) on Sep 25, 2004 at 16:04 UTC
Re: array & tcp socket
by pg (Canon) on Sep 26, 2004 at 02:51 UTC

    It is actually better to use udp for this kind of purpose, but tcp is also fine. All what you needed is a way to serialize your data, as others pointed out, you can use Storable.

    Write up some example code for you, hope this helps:

    client: use Storable qw(freeze); use IO::Socket; use strict; use warnings; my $c = new IO::Socket::INET(Proto => "tcp", PeerAddr => "localhost", PeerPort => 3000, Timeout => 1); =document my $c = new IO::Socket::INET(Proto => "udp", PeerAddr => "localhost", PeerPort => 3000, Timeout => 1); =cut print "Connected\n"; my $arr = [1,2,3,4,5,6,7,8,9,10]; my $arr_freezed = freeze($arr); $c->send($arr_freezed); my $answer; $c->recv($answer, 1000); close $c; print $answer; server: use IO::Socket; use Storable qw(thaw); use strict; use warnings; =document my $server = new IO::Socket::INET(Timeout => 7200, Proto => "udp", LocalPort => 3000, LocalHost => "localhost"); =cut my $vserver = new IO::Socket::INET(Timeout => 7200, Proto => "tcp", LocalPort => 3000, Listen => 2, LocalHost => "localhost"); print "Server is listening for connection ...\n"; my $server = $vserver->accept(); my $arr_freezed; $server->recv($arr_freezed, 1000); my @arr = @{thaw($arr_freezed)}; my $total = 0; for (@arr) { $total += $_; } $server->send($total); close $server; print "Connection closed\n";