2015-06-16 10 views
2

Я хочу открыть сокет и прочитать первые 6 байтов.PHP: Как читать N байтов из сокета?

$data = stream_socket_recvfrom($stream, 6);

Но если клиент посылает нулевые байты, функция чтения только первую часть данных и прекращает чтение.

{0x51, 0x01, 0x00, 0x11, 0x11, 0x11} 

И я получаю только {0x51, 0x01}

Как читать все 6 байтов в этом случае?

Спасибо

+0

Можете ли вы использовать http://php.net/manual/en/function.socket-recv.php? – Twisty

+2

как вы создали поток? php не использует нулевые терминаторы в строках, поэтому нет причины останавливаться на нуле. –

+0

Для создания я использую stream_socket_server(), как там: https://github.com/reactphp/socket/blob/master/src/Server.php Я использую его класс – comm1x

ответ

0

Извините, проблема не в PHP. Клиент на C++ неверно рассчитать длину сообщения:

send(sock, chars, strlen(chars), 0); 

И strlen C++ разбивается на нулевой байт.

Смежные вопросы