Я работаю над проектом GPS-трекера и создал сервер сокетов, используя этот класс
Как прослушивать TCP-порт с помощью PHP?
Его работоспособность до 2-го шага ACK от количества данных, полученных от устройства.
Это то, что требуется интеграционным документом.
Затем модуль начинает отправлять первый пакет данных AVL. После того, как сервер получает пакет и анализирует его, сервер должен сообщить номер модуля данных, полученных как целое (четыре байта).
Если отправленный номер данных и сообщенный сервером не соответствует модулю, пересылаемые отправленные данные.
Сервер подтверждает прием данных (3 элемента данных): 00000003 (3) Сервер ACK в пакет AVL Data Packet
Я могу полностью проанализировать данные, но не могу понять, как отправить целое число в 4-байтовом формате, но, вероятно, не получив правильного пути.
Я пробовал php pack() с этими форматами я *, 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 как целое число или оставить padded 3, чтобы он стал 0000003 (4 символа - 4 байта)
Но ни один из форматов не был успешным, так как устройство не отправляет мне следующий набор данных. Обязательно, чтобы я отправил количество данных, полученных как ACK, чтобы отправить обратно, чтобы получить следующий набор, если данные с устройства.
Может ли кто-нибудь помочь мне с правильным способом, чтобы я отправил целое число так, чтобы его отправили как 4-байтовый формат.
Вопрос был решен по аналогичному вопросу
PHP конвертирует целое число в 32-разрядный (4 байта) hex для программирования сокетов
Наряду с этим
$output =pack('N*', $reply);
решили проблему.