我真的很想在我的Python应用程序中接收UDP广播数据包,但我并没有完全理解为什么。如果这有所作为,我将在Ubuntu 18.04上运行Python 2.7.15 +。
我有一个以太网传感器,它在端口(255.255.255.255)
的广播地址45000
上以1Hz的间隔发出健康状态消息。
该传感器再次连接到USB到以太网适配器,是否有任何区别-我不确定。
使用Wireshark,我可以看到这些消息以典型的间隔进入,并且(使用自定义Lua解码器)我可以看到这些消息是有效的。
我的Python类代码如下:
def startListening(self):
print("listening")
# Create the UDP socket
self.udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.udpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.udpSocket.bind(('',45000))
self.udpSocket.setblocking(0)
print(self.udpSocket.getsockname())
# prints ('0.0.0.0', 45000)
self.running = True
self.thread = threading.Thread(target=self.datagramPoll,args=(self.udpSocket,))
self.thread.start()
sleep(1)
def stopListening(self):
self.running = False
self.thread.join()
self.udpSocket.close()
def datagramPoll(self,sock):
while self.running:
try:
print("loop")
# Anything to read
data,addr = sock.recvfrom(1024)
print(data)
except socket.error, e:
print(e)
pass
sleep(1)
我发现我总是遇到[Errno 11] Resource temporarily unavailable
的异常,我的理解是EWOULDBLOCK
,因为没有任何要从套接字读取的数据。
我在Qt / C ++中有等效的代码,可以正常工作。我已经检查了ufw
并启用了相关端口,但仍然没有收到任何信息。