уважаемые знатоки! помогите решить задачу. необходимо написать пару клиент-сервер. клиент отправляет файл(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]
в итоге оба висят. заранее благодарен за помощь
Здравствуйте, bobtheblob, Вы писали:
B> после приема файла не получается отправить строку.
Потому что в таком варианте состояние "после приема файла" не наступит никогда. Надо со стороны клиента сообщить серверу, что у нас EOF. Проще всего так:
# открытие сокета и передача файла не меняется ...
close FILE;
shutdown($socket, 1); # Закрыть его здесь на запись и спокойно прочитать ответ.
while (<$socket>) {
print $_;
}
close $socket;