在Python中接收UDP时处理空字符

时间:2013-09-14 11:57:46

标签: python sockets null udp

我有一个python脚本我正在运行以通过UDP从Arduino的模拟输入接收数据。

import socket

UDP_IP = "10.0.0.222"
UDP_PORT = 50000

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(12) # buffer size is 32 bytes
    print len(data) #check length of data recived
    sensors = struct.unpack('>hhhhhh', data)
    print sensors

Arduino正在以12字节的数据包发送6个模拟读数的数据包。每个读数是一个16位整数,2个字节,LSB优先于MSB。我的脚本工作正常,直到Arduino上的一个读数的值降到255以下。此时Arduino发送一个空字符\ x00。发生这种情况时,脚本将不再读取任何数据并停止运行。我认为我遇到的问题是将UDP数据读入字符串,我已经看过使用sock.recv_into()但是没有找到任何我理解的例子,任何帮助或指针都会受到赞赏。 谢谢 史蒂夫

1 个答案:

答案 0 :(得分:0)

您不能将二进制数据视为以空字符结尾的字符串,特别是您不能使用字符串函数来确定其长度。数据报包含接收数据的长度。当然,Python提供了一种从数据报中获取的方法吗?