向 perl 套接字发送请求



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

  1. 打开插座
  2. 发送登录PDU,
  3. 来自服务器的 recv 响应,如果正常,则发送 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();

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

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

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

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

希望有所帮助。

最新更新