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";
|