解包UDP包python

时间:2017-01-21 23:36:16

标签: python sockets udp unpack

我通过wifi接收UDP数据包,在PC上运行简单的python脚本。服务器和PC位于同一子网中。

服务器每20 ms左右发送15 uint_8(每个4字节)。收到的数据似乎已损坏(非十六进制值)。任何反馈为什么会发生这种情况非常感谢。 例如,我得到这样的东西,

'\xb3}fC\xb7v\t>\xc8X\xd2=g\x8e1\xbf\xe6D3\xbf\x00\x00\x13\xc3\xc8g\x1b@\xc2\x12\xb2B\x01\x000=\x02\xc0~?\x01\x00\x94<\x00\x00\x00\x00\x00\x00\x00\x00\x00
@\x9c\xbe\xac\xc9V@', ('192.168.4.1', 4097))

脚本附在此处。

from socket import *
import time

HOST = '192.168.4.10'
PORT = 9048

address = (HOST, PORT) 
client_socket = socket(AF_INET, SOCK_DGRAM) #Set Up the Socket
client_socket.bind((HOST, PORT)) 
client_socket.settimeout(5) #only wait 5 second for a response, otherwise timeout

while(1): #Main Loop
    single_var = client_socket.recvfrom(1024)
    print single_var #Print the response from Arduino
    time.sleep(10/1000000) # sleep 10 microseconds

1 个答案:

答案 0 :(得分:1)

print语句不知道您想要十六进制输出,因此它将具有有效字符表示形式的十六进制值解释为字符。如果要将其打印为十六进制字节,请参阅Print a string as hex bytes中的解决方案。

即。做:

print ":".join("{:02x}".format(ord(c)) for c in single_var)