2010-11-23 287 views
0

我想在Perl中寫一個簡單的IO ::套接字連接。但是,我遇到了一些問題。這是在服務器端的代碼:問題與IO ::套接字TCP連接

my $listener = 
     IO::Socket::INET->new(LocalPort => 8000, Listen => 1, Reuse => 1); 

    die "Can't create socket for listening: $!" unless $listener; 
    print "Listening for connections on port 8000\n"; 

    while(1) { 
     while ($client = $listener->accept()) { 
     while (<$client>) { 
      my @arguments = split(/ /, $_); 
      my $result = "something" ;# here we do something in my code 
      warn $result; 
      print $client $result; 
      close $client; 
     } 
     } 
    } 

而且客戶端代碼:

use IO::Socket; 
my $sock = new IO::Socket::INET (
     PeerAddr => 'xx.xxx.xxx.xxx', 
     PeerPort => '8000', 
     Proto => 'tcp', 
); 
die "Could not create socket: $!\n" unless $sock; 
$sock->autoflush(1); 
print $sock "somethin something"; 
print "sent\n"; 
while (<$sock>) { print } 
close $sock; 

我現在的問題是,數據似乎當我關閉將只從客戶端發送到TEH服務器客戶端Perl程序。我在客戶端收到「已發送」消息,但在手動關閉客戶端之後,服務器端的「某事」消息纔會出現。

此外,我想獲得服務器響應。到目前爲止,因爲我必須手動關閉腳本,所以響應不會被客戶端所接受。

誰能幫助?

回答

1

while (<$sock>)
- 等待一條線。這是一個字符串,以「\ n」字符結尾。

您必須將「\ n」添加到字符串,或使用「讀取」功能。

+0

謝謝你,這工作!我無法相信我之前沒有找到這些信息......一定是錯過了它。 – pyvi 2010-11-23 08:16:35