读取UDP数据包
问题描述:
我在解析UDP数据包时遇到了一些问题。我收到的报文,并用存储在变量“数据”和“地址”的数据,并发送器地址:读取UDP数据包
数据,ADDR = UDPSock.recvfrom(BUF)
该解析数据为字符串,我现在无法变成字节。我知道总共有28个字节的数据报数据包的结构,我试图得出的数据是以字节17:28为单位的。
我也试着这样做:
mybytes = data[16:19]
print struct.unpack('>I', mybytes)
--> struct.error: unpack str size does not match format
而且这样的:
response = (0, 0, data[16], data[17], 6)
bytes = array('B', response[:-1])
print struct.unpack('>I', bytes)
--> TypeError: Type not compatible with array type
而且这样的:
print "\nData byte 17:", str.encode(data[17])
--> UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in position 0: ordinal not in range(128)
更具体地说我想分析我认为是一个unsigned int 。现在我不确定接下来要尝试什么。我完全新在Python插座和字节转换,因此任何意见将是有益的:)
感谢, 托马斯
答
一个无符号INT32是4个字节长,所以你必须为4个字节送入struct.unpack
。
替换
mybytes = data[16:19]
与
mybytes = data[16:20]
(右数是[16,17,18]不包含第一个字节,即范围(16,19)=),你应该很好去。