我使用raspberry pi通过TCP / IP发送数据,其中raspberry pi是服务器,而我的本地Windows机器是客户端。
当我尝试在python 3中读取数据时,我得到了奇怪的字符,例如:
send 20 decimal I receive @4
send 21 decimal I receive @5
send 22 decimal I receive @6
以下是我本地计算机上运行的代码:
import socket
host = '192.168.1.100'
port = 25000
mySocket = socket.socket()
mySocket.connect((host,port))
data = mySocket.recv(4).decode()
print (data)
使用python 2没有问题,收到的字符无需解码。我知道我需要对数据进行一些解码,但不确定是什么。任何建议都会非常有用。
答案 0 :(得分:0)
我终于通过使用以下代码来解决这个问题:
data = mySocket2.recv(4)
newData = int.from_bytes(data, byteorder='big', signed=False)
发件人正在发送uint32数据,这显然是未签名的并且是bigEndian。这也必须在接收方指定(我的python3脚本)。如果发件人更改并开始发送int8数据,那么我需要将接收者代码更新为以下内容:
data = mySocket2.recv(1)
newData = int.from_bytes(data, byteorder='big', signed=True)
P.S。串行或TCP / IP接收似乎遵循python中的相同逻辑,这意味着接收的数据需要相同的编码。