Python - 发送和接收UDP数据包

时间:2017-12-05 19:17:07

标签: python sockets udp send

几个月前,我开始使用Python。现在我已经达到了需要一些关于网络的帮助的地步。 我有以下情况:

  • 小型本地网中的一台PC和3台外部设备。

  • PC想要观察每个设备上的开关状态(开/关)。这将通过从PC到每个设备的初始命令来完成。

  • 收到此命令后,每当设备发生变化时,每个设备都会自动向PC发送一个包含新状态的数据包。
  • 网络上的所有数据包都是UDP数据包

在PC上我运行了以下Python脚本(仅适用于一个设备):

import socket

UDP_IP1 = "192.168.1.64"
UDP_IP2 = "192.168.1.73"
UDP_IP3 = "192.168.1.74"
UDP_PORT = 45           # used port on external device

port = 52129

message = "Message to observe..."      # not the real command string

def SendData():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
        s.bind(("", port))
        msg = message.encode('utf-8')
        s.sendto(msg, (UDP_IP1, UDP_PORT))
    except:
        print("Sending Error!!!\n")

    return s

def ReceiveData(sock):
    print("Receiving data: \n")

    while True:
        data, addr = sock.recvfrom(4096)      # buffer size is 4096 bytes
        print ("received message:", data)


if __name__ == "__main__":    
    s = SendData()
    ReceiveData(s)

我的问题:原则上这个脚本正在运行,但是在大约2分钟后没有更改设备上的交换机时,当交换机状态发生变化时,我不再收到来自外部设备的数据包。但我可以通过已安装的Wireshark查看传入的数据包。

当我没有收到任何东西时,这似乎是一个暂停,但' sock.recvfrom'仍在等待数据。

是否有人遇到过同样的问题?

0 个答案:

没有答案