У меня есть устройство контроля доступа ethenet, которое, как говорят, может связываться через TCP.
Как я могу отправить pachet, введя данные HEX, так это то, что я есть от их руководства (стандартный формат для пакетов связи отправленных и полученных после каждой команды)
Можете ли вы показать некоторые примеры кода или ссылки, чтобы начать ....
python отправлять/получать шестнадцатеричные данные через TCP-сокет
standard return packet from the terminal Size (bytes) BS (0x08) : ASCII Character 1 STX (0x02) : ASCII Character 1 LENGTH : length from BS to ETX 4 TID : system unique I.D. 1 RESULT 1 DATA : returned parameter N CHECKSUM : byte sum from BS to DATA 1 ETX (0x03) : ASCII Character 1
Standard command packet to the terminal Size (bytes) ACK (0x06) : ASCII Character 1 STX (0x02) : ASCII Character 1 LENGTH : length from ACK to ETX 4 TID : system unique I.D. (ex: 1) 1 COMMAND 1 Access Key(Optional) 6 DATA : command parameter N CHECKSUM : byte sum from ACK to DATA 1 ETX (0x03) : ASCII Character 1 This packet starts from ACK. In this packet, multiple byte value must be started from MSB. For example, if length was 10, LENGTH is 0x00 0x00 0x00 0x0a.
и когда я получить данные, отправленные с s.send, я получаю ответ от s.recv, как могу ли я отобразить то, что возвращается на HEX с «печатью»? – Mike
вы используете 'struct.unpack' (для 8-байтового начала пакета ответа) - опять же, гарантируя, что вы получаете весь ответ, является ключевым, поскольку TCP является потоковым протоколом, а не протоколом дейтаграммы, поэтому может быть произвольным урезать вещи - маловероятно, но зачем рисковать? Так же, как вы должны использовать 'sendall' вместо' send', чтобы убедиться, что весь упакованный передан, как я упоминал в ответ на ваш комментарий к моему ответу. –