三、发送端示例代码
#! /usr/bin/perl
###############################################################################
# \File
# tcp_client.pl
# \Descript
# send message to server
###############################################################################
use IO::Socket;
use IO::Select;
#hash to install IP Port
%srv_info =(
"srv_ip" => "192.168.1.73",
"srv_port"=> "5277",
);
my $srv_addr = $srv_info{"srv_ip"};
my $srv_port = $srv_info{"srv_port"};
my $sock = IO::Socket::INET->new(
PeerAddr => "$srv_addr",
PeerPort => "$srv_port",
Type => SOCK_STREAM,
Proto => "tcp",
)
or die "Can not create socket connect. $@";
$sock->send("Client OK!\n", 0) or warn "send failed: $!, $@";
$sock->autoflush(1);
my $sel = IO::Select->new($sock);
while(my @ready = $sel->can_read)
{
foreach my $fh(@ready)
{
if($fh == $sock)
{
while(<$fh>)
{
print $_;
}
$sel->remove($fh);
close $fh;
close FILE;
}
}
}
$sock->close();
四、接收端示例代码
#! /usr/bin/perl
###############################################################################
# \File
# tcp_server.pl
# \Descript
# listen to local port
###############################################################################
use IO::Socket;
use IO::Select;
#hash to install IP Port
%srv_info = (
"clt_ip" => "192.168.1.72",
"clt_port" => "5277",
"srv_ip" => "192.168.1.73",
"srv_port" => "5277",
);
$SIG{INT} = $SIG{TERM} = sub{
$sock->close() or warn "Close Socket failed. $!, $@";
}
my $clt_addr = $srv_info{"clt_ip"};
my $clt_port = $srv_info{"clt_port"};
my $srv_addr = $srv_info{"srv_ip"};
my $srv_port = $srv_info{"srv_port"};
my $sock = IO::Socket::INET->new(
PeerAddr => "$clt_addr",
PeerPort => "$clt_port",
LocalAddr=> "$srv_addr",
LocalPort=> "$srv_port",
Type => SOCK_STREAM,
ReuseAddr=> SO_REUSEADDR, # Recycling port and reusing
Proto => "tcp",
Listen => 20,
)
or die "Can not create socket connect: $!, $@";
my $sel = IO::Select->new($sock);
while(my @ready = $sel->can_read)
{
foreach my $fh(@ready)
{
if($fh == $sock)
{
my $new = $sock->accept();
$sel->add($new);
}
else
{
$len = $fh->recv($buffer, 1024, 0);
print "$buffer\n";
$fh->send("Server OK!\n",0);
$fh->autoflush(1);
$sel->remove($fh);
$fh->close();
}
}
}
$sock->close() or warn "Close Socket failed. $!, $@";