perl клиент-сервер
От: bobtheblob  
Дата: 30.04.10 19:28
Оценка:
уважаемые знатоки! помогите решить задачу. необходимо написать пару клиент-сервер. клиент отправляет файл(tmp.pdf в той же папке), сервер его принимает и в ответ шлёт строку. после приема файла не получается отправить строку.

сервер:

[perl]
#!/usr/bin/perl -w

use IO::Socket;

my $server = IO::Socket::INET->new(
    Listen => 5,
    LocalAddr => 'localhost',
    LocalPort => 5050,
    Proto     => 'tcp'
) or die "Can't create server socket: $!";

while(1){
    my $client = $server->accept;

    open FILE, ">out" or die "Can't open: $!";
    while (<$client>) {
        print FILE $_;
    }
    close FILE;

    @out = `ls -l`;
    print $client @out;
}
[/perl]


клиент:


[perl]
#!/usr/bin/perl -w

use IO::Socket;

$socket = new IO::Socket::INET (
                                  PeerAddr  => '127.0.0.1',
                                  PeerPort  =>  5050,
                                  Proto => 'tcp',
                               )                
or die "Couldn't connect to Server\n";

open(FILE, "tmp.pdf")
    or die "Couldn't open for reading: $!\n";
                 
while (<FILE>) {
    print $socket $_;
}
close FILE;

while (<$socket>) {
    print $_;
}

close $socket;
[/perl]


в итоге оба висят. заранее благодарен за помощь
perl
Re: perl клиент-сервер
От: Аноним  
Дата: 30.04.10 22:24
Оценка:
Здравствуйте, bobtheblob, Вы писали:

B> после приема файла не получается отправить строку.


Потому что в таком варианте состояние "после приема файла" не наступит никогда. Надо со стороны клиента сообщить серверу, что у нас EOF. Проще всего так:
# открытие сокета и передача файла не меняется ...
close FILE;

shutdown($socket, 1);  # Закрыть его здесь на запись и спокойно прочитать ответ.
while (<$socket>) {
        print $_;
}

close $socket;
Re[2]: perl клиент-сервер
От: bobtheblob  
Дата: 01.05.10 19:12
Оценка:
большое спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.