Чтение из сокета до \r\n

LightSaber

Новичок
Код работает, отправляет и принимает.

PHP:
$open_socket = stream_socket_client("tcp://127.0.0.2:3454",  $errno, $errstr);
if ($open_socket) {
  $sent = stream_socket_sendto($open_socket,"test\r\n");
  $ret = stream_get_contents($open_socket,25);
Отправляю test\r\n получаю ответ при помощи:
PHP:
$ret = stream_get_contents($open_socket,25);

Известно что сокет это поток и читать можно любое количество символов. Но количество символов в ответе неизвестно, но известно что ответ заканчивается на "\r\n".

Как мне читать ответ сервера до "\r\n"?
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
"Читать из сокета" и "до \r\n" - это две разных операции.
Очевидно, их надо выполнять в два действия. Сначала прочитать, потом определить, где там "\r\n".
 

LightSaber

Новичок
Т.е в любом случае надо ставить буфер заведомо больше чем сообщение, например 1024?
 

fixxxer

К.О.
Партнер клуба
Буфер нужен еще и по второй причине: при чтении из сокета может вернуться любое количество байт <= запрошенного. Хоть один. Так устроены сокеты.
 
Сверху