【问题标题】:Sending requests to perl socket向 perl 套接字发送请求
【发布时间】:2013-09-23 10:30:13
【问题描述】:

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

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

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

【问题讨论】:

  • 那么...你的代码有什么问题?
  • 这是什么意思:The problem is that am one
  • @TLP 我的意思是说“问题只是……”
  • @fixon 我假设你的意思是说The problem is that I AM ONLY。你看,“am”本身只是一个介词。 “我错了”或“我是黄色的”。

标签: perl sockets


【解决方案1】:

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

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

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

希望能有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多