无法接收udp数据包

时间:2013-10-29 14:56:53

标签: python networking udp

我不知道是否是网络配置的情况或我的软件有问题。

我的设备地址为192.168.4.83。该设备直接连接到我的pc linux服务器,其地址为192.168.4.11

我想使用python从服务器向设备发送UDP数据包。服务器也在监听响应。我有一个简单的python脚本来做到这一点。我发送使用:

    self.sendSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    self.sendSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
    sock.sendSocket.send(msg,('<boradcast>', UDP_PORT))

我听并绑定到0.0.0.0。代码非常简单:一个线程正在发送udp数据包,另一个线程有while(1)循环,只接收数据包。

这是听力代码:

class CUdp(threading.Thread):
    def __init__(self, log=False):
        threading.Thread.__init__(self)
        self.running = True
        self.listenSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.listenSocket.bind(("", UDP_PORT))
        self.last_time = 0
        self.now = 0
        self.log = log
    def run(self):
        global sent_time
        while(self.running):
            data, addr = self.listenSocket.recvfrom(1024) 
            if data != None:
               recv_time = time.time()
               myprint("[RECV " +  str(datetime.datetime.now()) + "] (len=" + str(len(data)) +") : " +  str(data)+"\n", self.log)

奇怪的是,在wireshark上,我可以看到:数据包已从192.168.4.11发送到255.255.255.255,设备已对此数据包做出响应 - 来自192.168.4.83的数据包已被已发送至255.255.255.255。看来,使用bind(0.0.0.0,port)不会覆盖255.255.255.255。我迷路了,我没有想法。

ifconfig是:

eth0      Link encap:Ethernet  HWaddr 2C:41:38:9B:BF:CA  
          inet addr:192.168.4.11  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::2e41:38ff:fe9b:bfca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:34 errors:0 dropped:0 overruns:0 frame:0
          TX packets:413 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5050 (4.9 KiB)  TX bytes:26688 (26.0 KiB)
          Interrupt:17  

任何线索?

1 个答案:

答案 0 :(得分:0)

假设所有代码都写得正确,这可能只是linux防火墙的问题。 您可以将您的IP地址添加到iptables,或者如果您处于安全的网络环境中,则可以取下防火墙:

/etc/init.d/iptables stop