Я пытаюсь написать основное приложение для сетевого чата в Perl для учебных целей. В настоящее время у меня есть серверная и клиентская программа, которые работают практически так, как я хочу. Несколько клиентов могут подключаться к серверу и отправлять сообщения на него и из него. Тем не менее, я не совсем уверен, как идти о передаче сообщений от одного клиента другому, и я бы по достоинству оценил толчок в правильном направлении. Вот код, который у меня есть до сих пор, мысли?Основное приложение сетевого чата в Perl
Примечание: Это моя первая попытка использовать сеть или использовать Perl для надлежащего проекта, чтобы также было оценено любое другое руководство по его написанию.
chat_server.pl
#!/usr/bin/perl -w
# chat_server.pl
use strict;
use IO::Socket::INET;
my $port = shift or die "Port required!\n";
my $socket = IO::Socket::INET->new(
LocalPort => $port,
Proto => 'tcp',
Listen => SOMAXCONN
) or die "Can't create socket: $!!\n";
my $child;
print "Listening for clients on $port...\n";
REQUEST:
while(my $client = $socket->accept) {
my $addr = gethostbyaddr($client->peeraddr, AF_INET);
my $port = $client->peerport;
if($child = fork) {
print "New connection from $addr:$port\n";
close $client;
next REQUEST;
} die "fork failed!\n" unless defined $child;
while (<$client>) {
print "[$addr:$port] says: $_";
print $client "[$addr:$port] says: $_";
}
}
close $socket;
chat_client.pl
#!/usr/bin/perl -w
# chat_client.pl
use strict;
use IO::Socket::INET;
my $port = shift or die "No port\n";
my $server = shift or die "No server\n";
my $client_socket = IO::Socket::INET->new(
PeerPort => $port,
PeerAddr => $server,
Proto => 'tcp'
) or die "Can't create send socket: $!!\n";
my $child;
if($child = fork) {
while(1) {
sleep(1);
print scalar <$client_socket>;
}
}
die "fork failed!\n" unless defined $child;
print "Connected to $server:$port!\n";
do {
print "> ";
print $client_socket $_ if defined $_;
} while(<STDIN>);
print "Closing connection";
close $client_socket;
Это на самом деле довольно хорошо для вашего уровня опыта.Единственное, что я сразу скажу, это то, что вы должны убедиться, что ваш учебный материал обновлен. '-w' в командной строке или строке shebang уже давно вытесняется превосходными' предупреждениями использования'. Вы также должны объявить '$ child' в код сервера внутри' while', непосредственно перед 'if' – Borodin