Я работаю над проектом GPS-трекера и создал сервер сокетов, используя этот класс
Как прослушать TCP-порт с помощью PHP?
Работает нормально до 2-го шага подтверждения количества данных, полученных с устройства.
Это именно то, что требуется в документе интеграции.
Затем модуль начинает отправлять первый пакет данных AVL. После сервера
получает пакет и анализирует его, сервер должен сообщить номер модуля
данные получены как целое число (четыре байта).Если отправленный номер данных и сообщенный сервером не соответствует модулю
повторно отправляет отправленные данные.Сервер подтверждает получение данных (3 элемента данных): 00000003 (3)
Сервер ACK для пакета данных AVL
Я могу полностью проанализировать данные, но не могу понять, как отправить целое число в 4-байтовом формате, но, вероятно, не получаю правильный путь.
я пытался php pack () с этими форматами I *, L *, L *
$output =pack('l*', $reply);
SocketServer::socket_write_smart($client->socket,$output); // Send the Client back the String
SocketServer::socket_write_smart($client->socket,"String? ",""); // Request Another String
$ reply содержит номер данных, отправленных в виде пакета. Я попытался отправить 3 как целое число или слева с добавлением 3, чтобы он стал 0000003 (4 символа — 4 байта)
Но ни один из форматов не был успешным, поскольку устройство не отправляет мне следующий набор данных.
Это обязательно, что я отправляю количество данных, полученных как ACK, чтобы отправить обратно, чтобы получить следующий набор, если данные с устройства.
Может ли кто-нибудь помочь мне с правильным способом, чтобы я отправил целое число таким образом, чтобы он был отправлен в формате 4 байта.
Вопрос был решен по аналогичному вопросу
PHP конвертирует целое число в 32-битный (4 байта) гекс для программирования сокетов
Наряду с этим
$output =pack('N*', $reply);
решил проблему.
Других решений пока нет …