【问题标题】:python tcp socket wrong valuepython tcp套接字错误值
【发布时间】:2021-10-21 21:00:41
【问题描述】:

我使用 python connect A rfid device by tcp socket.

这是基本代码

HOST = '192.168.1.159'
PORT = 4001
from socket import *
def main():
    tcp_client_socket = socket(AF_INET,SOCK_STREAM)
    tcp_client_socket.connect((HOST,PORT))
    while True:
        recv_data = tcp_client_socket.recv(10240)
        if recv_data:
            print(recv_data)
        else:
            break
    tcp_client_socket.close()
if __name__ == '__main__':
    main()

然后我会收到这样的值

b'\xa0\x13\x01\x89\x1c4\x000\x083\xb2\xdd\xd9\x01@\x00\x00\x00\xa4pK'

但是 tcp socket 测试工具会收到这样的值

A0 13 01 89 1C 34 00 30 08 33 B2 DD D9 01 40 00 00 00 A4 70 4B

检查突出显示部分。

我喜欢

print(recv_data.decode())

然后接收

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 0: invalid start byte

我不知道如何解决这个问题。有人可以帮忙吗?请。

【问题讨论】:

  • 如果字节字符串在可打印的 ASCII 范围内,默认显示会显示一个 ASCII 字符。所以b'\x34' == b'4'b'\x40' == b'@'。它只是一个 display 表示。但我看到你发现.hex() 给你一个十六进制表示。无论如何接收到的字节都是一样的。

标签: python sockets tcp


【解决方案1】:

我解决了我的问题

print(recv_data.hex())

然后接收

a00a018900000500000001c6

发送数据

    packet = bytearray()
    packet.append(0xA0)
    packet.append(0x04)
    packet.append(0x01)
    packet.append(0x74)
    packet.append(0x00)
    packet.append(0xE7)
    packet.append(0xA0)
    packet.append(0x04)
    packet.append(0x01)
    packet.append(0x89)
    packet.append(0x01)
    packet.append(0xD1)
    tcp_client_socket.send(packet)

【讨论】:

  • 您可以使用packet = bytes([0xa0,0x04, ... ])b'\xa0\x04\x01...' 代替手动追加。
猜你喜欢
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 2014-11-08
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多