2013-09-23 93 views
0

我想以下面的方式发送和接收请求到同一套接字。发送请求到perl套接字

  1. 开放式插槽
  2. 发送LOGINPDU,从服务器,如果确定发送TRANSPDU从服务器
  3. 发送LOGOUTPDU
  4. recv的响应
  5. recv的响应。

样的东西正在尝试以下操作:

#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

这是什么意思:'问题就在于一个' – TLP

+0

@TLP我打算说“问题是我只是......” – fixon

回答

1

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

因此,如果服务器的答案是(只),一条线,你可以尝试这样的事:

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

希望这有助于一点。