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

无法通过广播地址接收UDP数据包,ArtNet

太叔昊穹
2023-03-14

我正在尝试接收raspberry PI上的UDP数据包。我已经创建了一个简单的java程序来连接网络。(我下面有所有相关代码)

String myNetworkAddress = "10.0.0.11";
String myBroadcastAddress = "10.255.255.255";
// Setup network connection
    try {
        InetAddress nicAddress = InetAddress.getByName(myNetworkAddress);
        InetAddress baddr = InetAddress.getByName(myBroadcastAddress);
        dmx = new ArtNet(nicAddress, baddr);

        udpsocket = new DatagramSocket(null);
        udpsocket.setReuseAddress(true);
        udpsocket.bind(new InetSocketAddress(nicAddress, dmx.getPort()));
        udpsocket.setBroadcast(true);
        udpsocket.setSoTimeout(1000);
        System.out.println("Opened socket " + udpsocket.getLocalAddress() + ":" + udpsocket.getLocalPort());
    } catch (Exception e) {
        System.out.println("can't open socket " + e);
    }

while (true) {
        if (udpsocket != null) {
            if (dmx.readPacket(udpsocket)) {
                i = dmx.getPacket();
// read packet and process 
 }
 }
 }

我不能从广播中接收到任何东西,在一个覆盆子圆周率。但当我在另一台计算机上运行此代码时,我能够从广播中接收数据包。这让我相信java没有被授予创建套接字、绑定端口的权限,并且它不是代码,而是raspberry PI上的一种安全措施。

    null
eth0      Link encap:Ethernet  HWaddr b8:27:eb:11:11:11
          inet addr:192.168.1.48  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:351 errors:0 dropped:0 overruns:0 frame:0
          TX packets:376 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:25333 (24.7 KiB)  TX bytes:77137 (75.3 KiB)
timeout 10;
lease {
    interface "eth0";
    fixed-address 10.0.0.10;
    option broadcast-address 10.255.255.255;
    option subnet-mask 255.0.0.0;
    option host-name "node.local";
    renew 2 2022/1/1 00:00:01;
    rebind 2 2022/1/1 00:00:01;
    expire 2 2022/1/1 00:00:01;
}

没有运气。如有任何建议或帮助,我们将不胜感激。

共有1个答案

顾亦
2023-03-14

通过绑定NicAddress,它只接受来自网络地址的传入数据包。绑定到0.0.0.0将允许来自广播IP和其他IP地址的传入协议

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

  • 我们现有的软件定期向本地子网(X.X.X.255)上的特定端口(7125)广播UDP数据包。我们的监控软件运行在HP-UX(11.11)上,可以接收这些数据包,没有问题。然而,在将监控软件移植到Linux(RHEL6.1)之后,我们发现它并没有接收到广播数据包。tcpdump显示了到达Linux主机的数据包,但内核不会将它们发送给我们的软件。 我使用了几个Python2.x脚本,这些脚本模拟了监控

  • 我不知道是网络配置还是我的软件出了问题。 这是监听代码: 奇怪的是,在wireshark上,我可以看到:数据包已从发送到,并且设备已对此数据包作出响应--来自的数据包已发送到。使用bind(0.0.0.0,端口)似乎不能涵盖。我迷路了,一点主意都没有。 ifconfig为:

  • 问题内容: 我正在尝试通过recvfrom接收数据包的一部分。它实际上是这样的: 数据是这样发送的: 因此,想法是先读取一些元数据,然后再决定是否接收其他内容。问题是如果第二个缓冲区(serialised_buf)开头,我会收到4个’/ 0’字节。这似乎不是序列化的问题,我以前使用过序列化,并且在我一次接收到整个数据包(元和数据)的同时,一切都很酷。关于如何解决的任何想法? PS。我知道我可以跳过

  • 本章介绍 UDP 介绍 ChannelHandler, Decoder, 和 Encoder 引导基于 Netty 的应用 前面的章节都是在示例中使用 TCP 协议,这一章,我们将使用UDP。UDP是一种无连接协议,若需要很高的性能和对数据的完成性没有严格要求,那使用 UDP 是一个很好的方法。最著名的基于UDP协议的是用来域名解析的DNS。这一章将给你一个好的理解的无连接协议所以你能够做出明智的

  • 我有一个示例代码如下,套接字绑定到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)能够捕获数据包 我在网上搜索过,但找不到解决办法。