Я написал сценарий многосетевого сокета в perl. Я могу установить соединения с несколькими клиентами, использующими fork. Но после установки нового соединения я могу отправлять и получать только один раз. Я не могу больше читать или писать на клиентском сокете, чтобы продолжить разговор.Многопользовательский полнодуплексный Perl-сокет
AIM:
После клиент подключается он будет посылать его идентификатор сервера. Получив идентификатор, сервер будет извлекать файл клиента, используя свой идентификатор, и отправлять его по страницам клиенту. Так как клиент может принимать только ограниченные байты данных, мы не можем отправлять его в один сокет. Поэтому мне нужно отправить 1024 байта данных. Клиент должен подтвердить, и я снова должен отправить следующую страницу. Как и я, я должен сделать соединение сокета в течение длительного времени одновременно для каждого клиента, пока все они не получат весь файл.
Пример кода:
use strict;
use warnings;
use IO::Socket::INET;
# flush after every write
$| = 1;
my $data;
my ($server_socket, $client_socket);
my ($peer_address, $peer_port);
$server_socket = new IO::Socket::INET(
LocalHost => '192.168.0.7',
LocalPort => '1008',
Proto => 'tcp',
Listen => 5,
Reuse => 1
) or die "ERROR in Socket Creation : $!\n";
print "SERVER Waiting for client connection on port 1008";
#$SIG{CHLD}=sub {wait()}; # Signal waiting for the Child process created
while ($client_socket = $server_socket->accept()) {
my $pid = fork(); # Creating child as soon client creates a connection
if ($pid == 0) # Checking the child process
{
my $peer_address = $client_socket->peerhost();
my $peer_port = $client_socket->peerport();
print "Accepted New Client Connection From : $peer_address, $peer_port\n";
$client_socket->recv($data, 1024);
print $data;
$client_socket->send("FileLine1");
#Get the acknowledgement
$client_socket->recv($data, 1024);
$client_socket->send("FileLine2");
#Get the end acknowledgement
$client_socket->recv($data, 1024);
exit(0); # Exiting child process
}
}
Мой вопрос: можем ли мы полагаться на Perl для делать это? или Нам нужно пойти на другую платформу, например Java и т. д.
Мне действительно нужен пример для «создания постоянного многосетевого сокета» с использованием модуля Net :: Server. Я не могу найти – gzix