Это follow-up question о том, как обрабатывать префиксные сообщения, полученные от сетевого сокета. То, что я пытаюсь сделать, это:Данные сокета со значением ведущей длины
- Прочитайте первые 4 байта (что префикс $ и представляет собой длину сообщения)
- Проверьте, если префикс $ действительно размер 4 байта и если это целое
- Читайте полную $ сообщение, используя длину от префикса $
- Проверьте, если сообщение действительно размер $ приставка байт
до сих пор я следующие две строки кода:
$prefix = socket_read($socket, 4, PHP_BINARY_READ); //No 1.
//No 2: how to do the checks?
$message = socket_read($socket, $prefix, PHP_BINARY_READ); //No 3.
//No 4: how to do the checks?
Как я могу выполнить указанные проверки?
Немного сторона примечание: все данные, передаваемые через соединение сетевой розеткой в UTF8, прямой порядок байтов
Еще раз спасибо за вашу помощь, действительно ценю это. Чтобы проверить, является ли префикс $ целым числом, я должен проверить неустановленное значение в $ length (is_int ($ length)), правильно ли это? – Mike
@Mike: 'unpack' вернет' false', если '$ prefix' не соответствует указанному формату (в приведенном выше примере 32-битная подпись длинна,' l'). Если unpack возвращает что-либо, кроме 'false', вам не нужно проверять' is_int'. – netcoder
спасибо, работает отлично! – Mike