2013-10-29 148 views
2

我不知道是否它的网络配置的情况下,或者我的软件有问题。无法接收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。看来,使用绑定(0.0.0.0,端口)不包括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 

任何线索?

+0

看看答案在这里 - 它可以帮助解释行为:HTTP: //stackoverflow.com/a/13675919/334402? – Mick

回答

0

假设所有的代码写得都正确,这可能只是linux防火墙的一个问题。 您可以添加您的IP地址iptables的,或者你可以取下来的防火墙,你在一个安全的网络环境:

/etc/init.d/iptables stop