Forum Webscript.Ru

Программирование => Perl => Тема начата: Skif от 11 Февраля 2007, 13:10:26

Название: Сервер-Клиент на Perl(IO::Socket) - неполучается
Отправлено: Skif от 11 Февраля 2007, 13:10:26
Сабж.
необходимо для проэкта написать своего демона, который бы слушал порт, принимал сообщения, работая по определенному алгоритму,но получаю маленький затык, на этапе простой отправки приема данных:

#!/usr/bin/perl -w
use IO::Socket;
#use strict;
use POSIX;
require \'sys/syscall.ph\';
my $sock = IO::Socket::INET->new(LocalAddr => \'127.0.0.1\',
                                LocalPort => \'2727\',
                                Listen => 15,
                                Type => SOCK_STREAM,
                                Proto    => \'tcp\');


fork() && exit;

close STDOUT; close STDERR; close STDIN;
chdir \'/tmp\';
syscall(&SYS_setsid);
$SIG{\'INT\'} = $SIG{\'QUIT\'} = $SIG{\'TERM\'} = \'quit\';
$SIG{\'HUP\'} = \'ignore\';

$SIG{CHLD} =\\&REAPER;

while (1){
        while(my $client = $sock->accept()){
                                print $sock "My Net Daemon! Hello!\\n";
                                my $ddd = <$sock>;
                                print $sock $ddd;
                                #`echo $ddd>>/tmp/sk.s `;



        }
}
#sleep 20;
#exit(0);
close($sock);


########### SUBs

sub REAPER {
1 until (-1 == waitpid(-1,WNOHANG));
$SIG{CHLD} =\\&REAPER;
}

 

Скрипт в демона превращается без проблем. На данном этапе fork для каждого нового подключения мне не нужен, потому его убрал. Суть не в этом.
Согласно кода, у меня в случае подключения к порту 2727 должно в окно терминала выкинуть "My Net Daemon! Hello!\\n". проверяю обычным telnet-ом:

[root@fbsd2.home] /usr/local/script/Dpm/tmp :./s_s_server.pl
[root@fbsd2.home] /usr/local/script/Dpm/tmp :telnet localhost 2727
Trying 127.0.0.1...
Connected to localhost.
Escape character is \'^]\'.
Killed
[root@fbsd2.home] /usr/local/script/Dpm/tmp :

 
Может кто подсказать, как правильно слать данные и принимать? У меня через дискрипторы не получается, send/recv тоже не идут, правда я мог с флагами напутать. Пока роюсь в этом направлении
Название: Сервер-Клиент на Perl(IO::Socket) - неполучается
Отправлено: NeoNox от 12 Февраля 2007, 14:17:19
http://gelin.omsktele.com/text/trans/perlipc.html#TCP_Servers_with_IO::Socket
Название: Сервер-Клиент на Perl(IO::Socket) - неполучается
Отправлено: Skif от 12 Февраля 2007, 15:33:41
Спасибо за ссылку, сейчас пробую :)
Название: Сервер-Клиент на Perl(IO::Socket) - неполучается
Отправлено: Skif от 12 Февраля 2007, 22:21:02
То, что доктор прописал. Огромное спасибо!
Название: Сервер-Клиент на Perl(IO::Socket) - неполучается
Отправлено: Skif от 17 Февраля 2007, 20:24:01
А поделиться как бинарник послать, можете? Суть в чем. перевести дискриптор в binmode то я могу, а вот дальше как быть? как вернуть в текстовый формат, или на двоичку/хексы переходить? Иначе никак?
Название: Сервер-Клиент на Perl(IO::Socket) - неполучается
Отправлено: Skif от 17 Февраля 2007, 20:32:11
Да, про UUE и Base64 знаю. Вот только у меня раз в 15 минут формируется файл размером в пол метра. после упаковки он сжимается до 40 кил, если обработать UUE или B64 то размер файла растет до 80 и 59 кил соответственно. В общем надоть снизить паразитный траффик :)
Название: Сервер-Клиент на Perl(IO::Socket) - неполучается
Отправлено: Skif от 18 Февраля 2007, 09:48:04
Вопрос снят - туплю. Проспался и все стало на свои места