perl – 在发送数据之前检查套接字是否已连接

前端之家收集整理的这篇文章主要介绍了perl – 在发送数据之前检查套接字是否已连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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::INETIO::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 $!;
    }
    # ...
}

猜你在找的Perl相关文章