Xpoint
   [напомнить пароль]

Создание сервера и клиента

Метки: [без меток]
2008-11-10 09:55:53 [обр] Таня[досье]

Помогите пожалуйста, у меня вот такая проблема: не получается ничего отправиить от клиента к серверу.
вот мой текст создания сервера:
#!/usr/bin/perl#

use strict;
BEGIN { $ENV{PATH} = '/usr/ucb:/bin' }
use Socket;
sub LOG { print "$0 $$: @_ at ", scalar localtime, "\n" }

my ($port,$line1);
$port = shift || 222;
($port) = $port =~ /^(\d+)$/ or die "Erroneous port";

socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die "socket:$!"; # Создаем сокет
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsockopt: $!";
bind(SERVER, sockaddr_in($port, INADDR_ANY)) or die "Couldn't bind to port $port : $!\n"; #адрес сокет sockaddr_in($port, INADDR_ANY)
listen(SERVER,SOMAXCONN) or die "Couldn't listen on port $port : $!\n";# Установить очередь для входящих соединений
LOG "Server was started on port $port";
my $paddr;

$SIG{CHLD} = \&REAPER; #по сигналу удаляются дочерние процессы
for( ; $paddr = accept(CLIENT,SERVER); close CLIENT) {
   my($port,$iaddr) = sockaddr_in($paddr);
   my $name = gethostbyaddr($iaddr,AF_INET);
   LOG "Connect with $name [", inet_ntoa($iaddr), "] on port $port";
   print CLIENT "Output data- 1 Output message- 2\n";
}
while (defined($line1 = <CLIENT>)){
   $paddr = accept(CLIENT,SERVER);
   print $line1;#это не выводится
}

вот текст создания клиента:
#!/usr/bin/perl#

use strict;
use Socket;

my ($remote,$port, $iaddr, $paddr, $pro, $line);
$remote = shift || 'localhost';
$port = shift || 222; # случайный порт

if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
   die "Erroneous port" unless $port;

socket(SOK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));

$iaddr = inet_aton($remote);
$paddr = sockaddr_in($port, $iaddr);

connect(SOK, $paddr);
while (defined($line = <SOK>)) {

   print $line;
   chomp($pro=<STDIN>);
}
send SOK, $pro,0;
close (SOK) || die "close: $!";
exit;

что не правильно? что надо дописать?

спустя 33 минуты [обр] Thirteensmay(15/157)[досье]
Посмотрите
threads vs Thread
я там в конце простейшего клиента с сервером и обмен между ними приводил, точно помню работало.
спустя 12 минут [обр] Fd(3/35)[досье]
спустя 2 часа 32 минуты [обр] Алексей Севрюков(198/1280)[досье]
Таня[досье] Во-первых, конечно посмотрите ссылки, которые приведены выше. Во-вторых, ответьте пожалуйста на вопрос - а как Вы проверяете рабоспособность клиент-сервера? На одной машине или не разных?
спустя 1 час 37 минут [обр] Таня[досье]
на одной. сервер реагирует на подключение клиента, а клиент подключается к серверу, только не могу передать сообщение от клиента серверу
спустя 3 часа 36 минут [обр] Таня[досье]
при использовании IO::Socket::INET получается
но надо написать в ручную, что до сих пор не получается
спустя 16 часов [обр] Михаил(0/17)[досье]
Таня[досье] в ваших скриптах, если не ошибаюсь, есть небольшая ошибочка. Как у вас сервер, выдит из безконечного цикла по слушанию accept`ов (for( ; $paddr = accept(CLIENT,SERVER); close CLIENT))?
А так как сервер не может оттуда выйти, то и начать обрабатывать следующий цикл while, где как раз и должно читаться то что пишет клиент, не получается.
спустя 5 дней [обр] Таня[досье]
Спасибо!:)
Powered by POEM™ Engine Copyright © 2002-2005