проблема с IO :: Socket TCP соединение - PullRequest
0 голосов
/ 23 ноября 2010

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

    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;

Моя проблема сейчас заключается в том, что данные, похоже, отправляются только от клиента к серверу, когда я закрываю клиентскую Perl-программу. Я получаю сообщение «отослано» на стороне клиента, но сообщение «что-то» на стороне сервера не появляется до тех пор, пока я вручную не закрою сторону клиента.

Кроме того, я хочу получить ответ от сервера. Пока что, поскольку мне приходится закрывать скрипт вручную, ответ не распространяется на клиентскую сторону.

Может кто-нибудь помочь?

1 Ответ

1 голос
/ 23 ноября 2010

while ( <$sock> )
- ждет строки.Это для строки, оканчивающейся символом "\ n".

Вы должны добавить "\ n" к строкам или использовать вместо этого функцию 'read'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...