2010-11-23 18 views
0

私は単純なIO ::ソケット接続をperlで記述しようとしています。しかし、私はいくつかの問題にぶつかっています。ここでは、サーバー側のコードは次のとおりです。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

関連する問題