0

我正在尝试以下列方式向同一个套接字发送和接收请求。

  1. 打开插座
  2. 发送 LOGINPDU,
  3. 从服务器接收响应,如果确定发送 TRANSPDU
  4. 从服务器接收响应
  5. 发送 LOGOUTPDU。

下面是我尝试做的示例:

#1
my $sock = IO::Socket::INET->new( Proto=> "tcp", PeerAddr => "$IP",
               PeerPort => "$port") || 
           die "Could not connect to host => $IP:$port \n";
#2
print $sock $LOGINPDU."\n";

#3
while($ans=<$sock>) {
    $ans1.=$ans;
}
$sock->flush();
if($ans1) {
    print $sock $transPDU."\n";
    #4
    while($tns=<$sock>) {
        $tns.=$tns;
    }
}

#5
$sock->close();

问题是我只收到第一个请求的响应。

4

1 回答 1

1

我猜问题是您的脚本停留在第一个循环中,该循环在发送到服务器while后等待响应行(步骤 2 -> 3))。LOGINPDU这是因为readline( < >) 被阻塞并且服务器没有发送EOF,这是(与您的)代码退出循环的唯一选项,但作为副作用,它也会关闭连接。

因此,如果服务器的答案是(仅)一行,您可以尝试以下操作:

$ans1=<$sock>;
$sock->flush();
if($ans1) {
    ...
}

希望能有所帮助。

于 2013-09-23T10:57:36.187 回答