2010-11-23 5 views
0

Я пытаюсь написать простое соединение IO :: Socket в perl. Однако я сталкиваюсь с некоторыми проблемами. Вот код на стороне сервера:проблема с IO :: Socket TCP connection

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