向perl套接字发送请求

时间:2013-09-23 10:30:14

标签: perl sockets

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

  1. 打开套接字
  2. 发送LOGINPDU,
  3. 来自服务器的recv响应,如果可以,则发送TRANSPDU
  4. 来自服务器的recv响应
  5. 发送LOGOUTPDU。
  6. 以下尝试做的示例:

    #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();
    

    问题是我只收到第一个请求的回复。

1 个答案:

答案 0 :(得分:1)

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

所以,如果服务器的答案是(仅)一行,你可以尝试这样的事情:

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

希望有所帮助。