我有一個ethenet訪問控制設備,據說可以通過TCP進行通信。
我怎樣才能通過輸入十六進制數據發送pachet,因爲這是我從他們的手工有(標準格式發送,每個命令後收到的通信數據包)
能否請你展示一些示例代碼或鏈接上手....
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,如何應對我可以使用「打印」顯示以十六進制顯示的內容嗎? – Mike 2010-03-14 16:22:29
您使用'struct.unpack'(用於響應數據包的8字節開始) - 再次確保您獲得整個響應是關鍵,因爲TCP是流協議,而不是數據報協議,因此可能會任意截斷東西 - 不太可能,但爲什麼冒險呢?就像你應該使用'sendall'而不是'send'來確保整個包裝被傳輸一樣,正如我在回覆你對我的答案的評論中所提到的那樣。 – 2010-03-14 17:23:01