Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     16 Jan 2002  17:55:55
 To : Serg N. Yakovlev
 Subject : Re: IO::Socket ??? и fork()???
 -------------------------------------------------------------------------------- 
 
 Serg N. Yakovlev wrote:
 
 > Привет!
 > Вот пытаюсь пример воспризвести.
 > Хочется, открыв соединение и передав команду, получить обратно ответ. Hа том
 > конце киска с модемами и при подключении на порт линии и команде "at", дает
 > "ОК"
 > Hо в данном случае не происходит! Подскажите почему. Пример взят почти из
 > примеров "Perl Cookbook". Код:
 > ---------open
 > #!/usr/bin/perl
 > #
 > #
 > use strict;
 > use IO::Socket;
 > my ($host, $port, $comd, $kidpid, $handle, $line);
 > 
 > $host = "192.168.1.29";
 > $port = "2002";
 > $comd = "at";
 > 
 > $handle=IO::Socket::INET->new( Proto=>"tcp",
 > PeerAddr=>$host,
 > PeerPort=>$port,
 > Timeout=>5,
 > Type=>SOCK_STREAM);
 > #$handle->$autoflush(1);              <-------------------------почемуто при
 > отладке ругается???
 Потому, что правильно: $handle->autoflush(1);
 
 > #print STDERR "[Connect to $host:$port]\n";
 > 
 > die "can't fork: $!" unless defined($kidpid=fork());
 > 
 > if ($kidpid)
 > {
 > while (defined ($line = <$handle>))
 > {
 > # print STDOUT $line;
 > print $comd $line;
 Этот print пытается выдать строку $line в файл с дескриптором
 $comd. Которого конечно же не существует. Правильным было бы
 print "$comd $line"
 но смысл этого мне не ясен. Зачем выводит 'at ' себе же на экран
 перед выводом ответа?
 
 > }
 > kill("TERM" => $kidpid);
 > }
 > else{
 > while (defined ($line = <STDIN>))
 > {
 > print $handle $line;
 Вот может быть здесь хотелось print $handle "$comd$line"; ?
 
 > }
 > }
 > exit;
 
 Кстати:
 1. Уверены ли Вы в том, что каждая строка ответа заканчивается
 принятым в данной ОС символом \n? В противном случае построчное чтение не
 будет работать. (Хинт: возможно придется изменить $/ в "родительской"
 ветви и вдобавок сделать STDOUT->autoflush(1))
 2. Уверены ли Вы в том, что посылаемые команды содержат "правильный"
 (с точки зрения протокола, а не ОС) конец строки? (Хинт: $line =~
 s/\n$/\x0D\x0D/)
 3. Если вы закроете STDIN (например ^D в unix), кто убъет родетельский
 процесс? (Хинт: kill("TERM" => getppid()))
 
 Андрей
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 IO::Socket ??? и fork()???   Serg N. Yakovlev   16 Jan 2002 11:33:51 
 Re: IO::Socket ??? и fork()???   Artem Chuprina   16 Jan 2002 11:46:11 
 Re: IO::Socket ??? и fork()???   Serg N. Yakovlev   16 Jan 2002 13:24:54 
 Re: IO::Socket ??? и fork()???   Artem Chuprina   16 Jan 2002 14:42:51 
 Re: IO::Socket ??? и fork()???   Serg N. Yakovlev   16 Jan 2002 15:15:42 
 Re: IO::Socket ??? и fork()???   Artem Chuprina   16 Jan 2002 18:49:15 
 Re: IO::Socket ??? и fork()???   Andrey Sapozhnikov   16 Jan 2002 17:55:55 
Архивное /ru.perl/52844fda0dfc.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional