我正在尝试以以下方式向同一套接字发送和接收请求。
- 打开插座
- 发送登录PDU,
- 来自服务器的 recv 响应,如果正常,则发送 TRANSPDU
- 来自服务器的回复响应
- 发送 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) {
...
}
希望有所帮助。