Выполняется реализация "клиент-сервер" стандартными средствами Перл. Необходимо, чтобы сервер посылал в ответ на запрос клиента либо системную дату, либо системное время. Не получается реализовать пересылку сообщений от клиента к серверу. Буду признательна, если кто-нибудь поможет!
Сервер#!/usr/bin/perl -w
use strict;
BEGIN { $ENV{PATH} = '/usr/ucb:/bin' }
use Socket;
use Carp;
sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" }
my $port = shift || 2345;
my $remote = shift || 'localhost';
($port) = $port =~ /^(\d+)$/ or die "nevernij port";
socket(Server, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die "socket: $!";
setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) || die "setsockopt: $!";
bind(Server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
listen(Server,SOMAXCONN) || die "listen: $!";
logmsg "Server zapushen na portu $port";
my $paddr;
while(1) {
$paddr = accept(Client,Server);
my($port,$iaddr) = sockaddr_in($paddr);
my $name = gethostbyaddr($iaddr,AF_INET);
logmsg "Soedinenie s $name [", inet_ntoa($iaddr), "] s porta $port";
print Client "Privet, $name! Vivesti daty (d) ili vremya (v)?\n";
close Client;
}
Клиент#!/usr/bin/perl -w
use strict;
use Socket;
my ($remote,$port, $iaddr, $paddr, $proto, $line, $choice);
$remote = shift || 'localhost';
$port = shift || 2345; # случайный порт
if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
die "net porta" unless $port;
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die "socket: $!";
connect(SOCK, sockaddr_in($port, inet_aton($remote))) || die "connect: $!";
while (defined($line = <SOCK>)) {
print $line;
chomp($choice=<STDIN>); #выбор пользователя, который нужно передать серверу
#send SOCK, "$choice", 0; #пытаюсь отправить на сервер
}
close (SOCK) || die "close: $!";
exit;