【问题标题】:Android broadcast to 255.255.255.255 not workingAndroid 广播到 255.255.255.255 不工作
【发布时间】:2017-12-04 10:07:33
【问题描述】:

我一直在互联网上寻找一些解决方案来解决我的问题,但我根本无法让 255.255.255.255 广播工作。

        String broadip = "255.255.255.255";
        DatagramSocket socket= new DatagramSocket(PORT);
        InetAddress address = InetAddress.getByName(broadip);
        socket.setReuseAddress(true);
        socket.setBroadcast(true);
        InetSocketAddress sAddress = new InetSocketAddress(broadip, PORT);
        socket.bind(sAddress);

        int length = this.buffer.length;
        DatagramPacket packet = new DatagramPacket(this.buffer, length,address,PORT);
        socket.send(packet);
        socket.close();

当它到达socket.bind(sAddress) 行时,它会抛出异常“绑定失败”。我也尝试“跳过”这条绑定线,套接字发送数据包但其他机器从未收到此数据包。

奇怪的是,下面的代码工作得很好,但只将数据包发送到192.168.25.8,而我需要一个广播:

        String broadip = "192.168.25.8";
        DatagramSocket socket= new DatagramSocket(PORT);
        InetAddress address = InetAddress.getByName(broadip);
        socket.setReuseAddress(true);
        socket.setBroadcast(true);

        int length = this.buffer.length;
        DatagramPacket packet = new DatagramPacket(this.buffer, length,address,PORT);
        socket.send(packet);
        socket.close();

有android清单权限:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

有人可以帮忙吗?

【问题讨论】:

  • 你可以试试这个ip广播:172.16.0.0见en.wikipedia.org/wiki/Broadcast_address
  • 我的回答对你有帮助吗?
  • 我找到了我的ip广播地址,192.168.25.255,但是广播无论如何都不起作用。可能是编码问题?还是因为我在 Android 模拟器上运行?但是当我将包发送到另一个主机 IP 地址 192.168.25.8 时,该主机接收到消息就好了。
  • @Kaushal28 有什么想法吗?

标签: java android sockets udp broadcast


【解决方案1】:

在我的情况下,使用Network layer broadcast address(192.168.25.255 或 192.168.255.255 取决于您的子网)代替使用global broadcast address(255.255.255.255),在UDP 广播中完美运行。请参阅this link 了解它们之间的区别。

我之前遇到过同样的问题,THIS 页面建议使用 Network layer 广播地址而不是 255.255.255.255 进行 Android UDP 连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多