研究结果出来了,看了下仙子的案例,这个是最稳定最靠谱的了。
Server端:
#!/usr/bin/perl use IO::Socket; use IO::Select; # 如果需要打印到目前终端,需要加上 $|++; # 创建一个监听 my $socket=IO::Socket::INET->new(LocalAddr =>'192.168.31.60', LocalPort =>9981, Listen =>5, Proto =>'tcp') or die $@; # 创建一格IO::Select目标 my $read_set=new IO::Select(); # 把上述侦听socket加入到检查队列 $read_set->add($socket); # 启动的时候添加一个标识,用于调试 print "监听启动 "; # 创建一个死循环 while(1){ # 返回一个三参数列表,第一个参数表示可读的socket句柄集合(一个数组引用) my ($rh_set) = IO::Select->select($read_set, undef, undef, undef); # 遍历可读的socket foreach my $rh (@$rh_set){ if($rh == $socket){ my $ns = $rh->accept(); $read_set->add($ns); }else{ my $buf = undef; if (sysread($rh,$buf,2048)){ print "插入数据:$buf "; open LOG,'>>a.out'; print LOG "$buf "; close LOG; }else{ print "数据传送完! "; $read_set->remove($rh); $rh->close; } } } }
Client端:
#!/usr/bin/perl use IO::Socket; # 创建连接的Socket,连接到192.168.31.60 端口9981 my $sock=IO::Socket::INET->new(PeerAddr =>'192.168.31.60', PeerPort => 9981, Proto =>'tcp') or die $@; # 发送数据,Hello就是要传送的数据. while(<>){ print $sock $_ . " "; } # 发送完就关闭 $sock->close or die $!; # 退出 exit 0;