【问题标题】:Can't receive UDP packets over broadcast address, ArtNet无法通过广播地址接收 UDP 数据包,ArtNet
【发布时间】:2015-11-22 06:32:23
【问题描述】:

我正在尝试在树莓派上接收 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 没有权限创建套接字、绑定端口,而且它不是代码,而是树莓派上的一种安全措施。

我尝试过的事情:

  • 以 sudo 运行程序,
  • 更新权限,
  • 更改用户权限,以及
  • 更改 IP 表以允许端口 6454。

如果配置:

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)

dhclient.conf(在没有可用的路由器/dhcp 服务器时使用,使用静态 ip 在计算机和树莓派之间建立连接):

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;
}

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

【问题讨论】:

  • 你能发布 ifconfig 的输出吗?你能用 tcpdump 或 wireshark 或其他数据包嗅探器捕获数据包吗?如果是这样,它们可以从 rasberry pi 中捕获还是仅从其他系统中捕获?广播应用程序和 rasberry pi 之间有什么联系?它们是否在同一主机上,通过路由器等连接?

标签: java linux sockets udp raspberry-pi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 2018-08-19
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多