当前位置: 首页 > 知识库问答 >
问题:

无法接收udp数据包

谭伟
2023-03-14

我不知道是网络配置还是我的软件出了问题。

    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))

这是监听代码:

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,并且设备已对此数据包作出响应--来自192.168.4.83的数据包已发送到255.255.255。使用bind(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  

共有1个答案

袁英豪
2023-03-14

假设所有代码都编写得正确,这可能只是linux防火墙的一个问题。您可以将您的ip地址添加到iptables中,或者您可以在安全的网络环境中拆除防火墙:

/etc/init.d/iptables stop

 类似资料:
  • 我有一个示例代码如下,套接字绑定到IP10.10.88.11和端口9876。我用下面的wireshark测试了2种情况。两台电脑都在同一个子网中。 从同一PC发送UDP数据包(10.10.88.11)-UDP服务器能够接收 从另一台电脑发送UDP数据包(10.10.88.10)-UDP服务器无法接收,但Wireshark(在10.10.88.11)能够捕获数据包 我在网上搜索过,但找不到解决办法。

  • 我已经在互联网上搜索了一两个星期,想找到一个UDP客户端程序,它可以同时发送和接收数据,但是对于c#来说,没有关于这个主题的内容。在过去的几天里,我尝试创建一个UDP客户端,其中包含一个接收数据的线程。 发送UDP数据包效果很好,但程序无法接收我发送到的服务器,我相信服务器正在将所有数据包发送到不同的端口。 我如何修复这个程序? 有没有一种更简单的方法来进行UDP编程,比如用于TCP的Stream

  • 我正在尝试接收通过LAN电缆连接的FPGA发送的UDP广播数据包。FPGA向端口5001发送连续数据包。 我的python接收器代码很简单: 我使用Wireshark进行了检查,发现PC接收数据包。但是,我的Python代码没有。我还检查了从另一个本地python代码发送数据包的情况(发送到相同的地址和端口),并且我的接收器获得了这些数据包。

  • 我已经读过一些关于端口转换的内容,现在我想测试它。 我有一台NAT路由器后面的本地机器和一台带有外部IP地址的服务器。 这就是我如何将数据包从机器上的第5000个端口发送到服务器上的第4000个端口。 之后,我开始在本地机器上收听第 5000 次 在服务器上,当我看到来自的传入UDP时,我会向相同的和 发送响应(对其他端口和地址使用相同的脚本)。但我从未在本地机器上收到此响应。为什么? 此外,当服

  • 我正在尝试接收raspberry PI上的UDP数据包。我已经创建了一个简单的java程序来连接网络。(我下面有所有相关代码) 我不能从广播中接收到任何东西,在一个覆盆子圆周率。但当我在另一台计算机上运行此代码时,我能够从广播中接收数据包。这让我相信java没有被授予创建套接字、绑定端口的权限,并且它不是代码,而是raspberry PI上的一种安全措施。 null 没有运气。如有任何建议或帮助,