Пересылка файлов через Socket

  • Автор темы NODE49
  • Дата начала
N

NODE49

Гость
#1
Нужно организовать клиент-серверное приложение для пересылки различных файлов с одного компа на другой. Подскажите, как грамотно это реализовать?

В настоящий момент уперся вот во что:

На принимающей стороне:

[codebox]
my $lst_socket = IO::Socket::INET->new(LocalPort=>PORT,
Listen=>20,
Proto=>'tcp',
Type=>SOCK_STREAM,
Reuse=>1);
die $@ unless $lst_socket;

warn scalar(localtime), "\: Listening for connections...\n";

while (my $connection = $lst_socket->accept) {
Thread->new(\&interact,$connection);
}

sub interact{
my $handle = shift;
Thread->self->detach;
$lst_socket->recv(my $data, 1024, );
open (OUT, ">> output.txt") || die "can`t open input.txt: $!";;
print (OUT $data);
close (OUT);
$handle->close();
}
[/codebox]

На передающей стороне:

[codebox]
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp',
Type => SOCK_STREAM);

open (FIL, '<', "output.doc") || die "can`t open input.txt: $!";
while (<FIL>) {
$socket->send($_);
}

close (FIL);
close($socket);
[/codebox]

Вопросов собственно много, все они глупые:
1) Почему эта конструкция не работает и как сделать так, чтоб она работала правильно?
2) Как передавать имена файлов принимающей стороне?
3) Как передать сигнал, что вот сейчас например, пойдет передача файла и нужно его принять?

ЗЫ Пробовал использовать не send/recv а просто делать print в сокет - работает, но медленно, с какими-то подвисонами на минуту и похоже, что не_текстовые данные искажаются при передаче ;)