Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные / 8 сообщений из 8, страница 1 из 1
16.06.2006, 09:39:49
    #33794583
dff
dff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
Господа, помогите решить проблему. Есть сервер, который получает команды от клиента на выполнение. Возвращаемые результаты могут быть разной длины. Все они разделены \n.

К примеру, отправляем команду на выполнение и ждем ответа. Ответ состоит из трех частей, разделенных \n

Пробем получить все 3 ответа:

Код: plaintext
1.
2.
3.
4.
while ( <$socket> )
 {
    print $_;
}

В результате мы получаем все эти ответы, но из цикла не выходим. Мы продолжаем ждать еще результатов, хотя их больше нет. Подскажите пожалуйста, как выйти из цикла, если сервер закончил передавать данные без какого-либо специального символа "конец выполнения" ?
...
Рейтинг: 0 / 0
16.06.2006, 10:05:08
    #33794673
g613
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
Код: plaintext
1.
2.
3.
for ( 0  ..  2 ) {
  my $in = <$socket>;
  print $in;
} 

?
...
Рейтинг: 0 / 0
16.06.2006, 10:07:41
    #33794682
dff
dff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
g613
Код: plaintext
1.
2.
3.
for ( 0  ..  2 ) {
  my $in = <$socket>;
  print $in;
} 

?

Проблема в том, что в зависимости от результатов выполнения, может быть любое кол-во ответов. Либо 3, либо вообще 5. Да, довольно странный протокол, но все же что делать? :)
...
Рейтинг: 0 / 0
16.06.2006, 10:30:08
    #33794769
g613
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
...анализировать ответ, в зависимости от полученного результата говорить внутри цикла last, иначе не знаю.
Код: plaintext
1.
2.
3.
while ( <$socket> ) {
    print $_;
    last if ( какой то результат );
}
...
Рейтинг: 0 / 0
16.06.2006, 16:24:40
    #33796237
dff
dff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
g613...анализировать ответ, в зависимости от полученного результата

Так в этом-то и проблема, что нечего анализировать. Т.е. нет определенного символа конца передачи данных. Вот такие бывают у китайцев девайсы :-(
...
Рейтинг: 0 / 0
16.06.2006, 17:14:13
    #33796446
g613
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
тогда могу еще предложить почитать perldoc -f select ( тот который с 4 параметрами )
и `читать из сокета до тех пор пока туда пишут'...
...
Рейтинг: 0 / 0
16.06.2006, 17:16:27
    #33796455
g613
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
P.S.
в твоем случае лудше наверное будет почитать perldoc IO::Select
...
Рейтинг: 0 / 0
16.06.2006, 18:39:31
    #33796700
dff
dff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные
g613P.S.
в твоем случае лудше наверное будет почитать perldoc IO::Select

ок, спасибо
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PERL) IO::Socket, как выйти из цикла, если сервер закончил передавать данные / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]