我在perl中使用套接字连接编写一个简单的代码:
$sock = new IO::Socket::INET( PeerAddr => '192.168.10.7',PeerPort => 8000,Proto => 'tcp'); $sock or die "no socket :$!";
然后使用循环发送数据:
while... print $sock $str; ...loop
有没有办法在循环中插入一个命令来检查连接?
就像是:
while... socket is up? yes => send data no => connect again and the continue with loop ...loop
my $sock = new IO::Socket::INET( PeerAddr => '192.168.10.152',Proto => 'tcp'); $sock or die "no socket :$!"; open(my $fh,'<:encoding(UTF-8)','list1.txt') or die "Could not open file $!"; while (my $msdn = <$fh>) { my $port="8000"; my $ip="192.168.10.152"; unless ($sock->connected) { $sock->connect($port,$ip) or die $!; } my $str="DATA TO SEND: " . $msdn; print $sock $str; } close($sock);
解决方法
IO::Socket::INET是
IO::Socket的子类,其具有
connected
method.
If the socket is in a connected state the peer address is returned. If the socket is not in a connected state then undef will be returned.
如果检查返回undef,您可以在循环和call connect
中使用它.
my $sock = IO::Socket::INET->new( PeerAddr => '192.168.10.7',Proto => 'tcp' ); $sock or die "no socket :$!"; while ( 1 ) { unless ($sock->connected) { $sock->connect($port,$ip) or die $!; } # ... }