Я хочу отправить команду на сторонний сервер по протоколу TCP, в их документации они указали следующий формат данных команды:
Я хочу использовать функцию socket_write в php для отправки пакета, поэтому мой вопрос: как я могу преобразовать эти значения для его отправки?
Во-первых: я конвертирую каждое значение в шестнадцатеричное, а затем объединяю его в одну строковую переменную (каждый байт представляет 2 шестнадцатеричных символа). Например: 1 будет 01, если значение находится в 1 байте / 1 будет 0001, если значение будет в 2 байтах.
Во-вторых: я конвертирую каждое значение в двоичное (01), а затем объединяю его в одну строковую переменную (каждый байт представляет 8 бит). Например: 1 будет 00000001, если значение находится в 1 байте / 1 будет 00000000 000000001, если значение будет в 2 байтах.
Пожалуйста, может ли кто-нибудь помочь мне узнать, как я могу представить данные команды для отправки через сокет tcp в php? Я немного смущен.
Как я могу его использовать? У меня есть несколько типов целых, шестнадцатеричных и строковых данных. Можете ли вы привести пример, пожалуйста.
Я опубликовал ответ, но, похоже, вы даже не читали документацию, поскольку в ней объясняется, как это сделать.
Я читал это раньше, но я не понял, как это использовать в моем случае
Используйте функцию pack() для кодирования ряда значений в виде байтов строки.
$packet = pack('NnCCNCa*', $card_id, $param1, $param2, $param3, $time, $data, $data);
N
= беззнаковое 4-байтовое числоn
= беззнаковое 2-байтовое числоC
= беззнаковый байтa*
= строка4-байтовые и 2-байтовые форматы имеют обратный порядок байтов, что соответствует сетевому порядку байтов.
Должен ли я использовать «N» или «H» для шестнадцатеричного (идентификатор карты)?
N. На самом деле вы не отправляете шестнадцатеричный код, он просто показывает значение выборки таким образом.
Спасибо за помощь. Теперь я отправляю данные с помощью socket_write(), и когда я пытаюсь прочитать данные с помощью socket_read(), он возвращает следующее сообщение: socket_read(): невозможно прочитать из сокета [10054]: существующий соединение было принудительно закрыто удаленным хостом.
Используйте функцию pack().