Ubuntu,Python和接收UDP广播数据包

时间:2019-07-04 13:53:09

标签: python linux sockets udp broadcast

我真的很想在我的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并启用了相关端口,但仍然没有收到任何信息。

0 个答案:

没有答案