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

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

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

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

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

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

?

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

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

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


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