我正在尝试以下列方式向同一套接字发送和接收请求。
以下尝试做的示例:
#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();
问题是我只收到第一个请求的回复。
答案 0 :(得分:1)
我猜想问题是你的脚本停留在第一个while
循环中,等待LOGINPDU
发送到服务器后的响应行(步骤2 - > 3)) 。这是因为readline
(< >
)正在阻塞,而服务器没有发送EOF
,这是(带有您的)代码唯一可以退出循环的选项,但是作为副作用它也会关闭连接。
所以,如果服务器的答案是(仅)一行,你可以尝试这样的事情:
$ans1=<$sock>;
$sock->flush();
if($ans1) {
...
}
希望有所帮助。