Android 广播到 255.255.255.255 不起作用 [英] Android broadcast to 255.255.255.255 not working

查看:56
本文介绍了Android 广播到 255.255.255.255 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在互联网上搜索解决我的问题的一些方法,但我根本无法使 255.255.255.255 广播工作.

I've been searching on the internet for some solutions o my problem, but I simply can't make the 255.255.255.255 broadcast work.

        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) 行时,它抛出异常绑定失败".我也试图跳过"这个绑定行,套接字发送了数据包,但其他机器从未收到这个数据包.

When it gets to the socket.bind(sAddress) line, it throws an exception "failed to bind". I also tried to "skip" this bind line, the socket sends the packet but the other machines never receive this packet.

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

Strangely the code below works just fine, but only sends the packet to 192.168.25.8, and I need a broadcast instead:

        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 manifest 权限:

There are the android manifest permissions:

<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" />

有人可以帮忙吗?

推荐答案

在我的例子中,不是使用全局广播地址(255.255.255.255),而是使用网络层广播地址(192.168.25.255 或 192.168.255.255 取决于您的子网)在 UDP 广播中完美运行.请参阅此链接了解它们之间的区别.

In my case, instead of using global broadcast address(255.255.255.255), use of Network layer broadcast address (192.168.25.255 or 192.168.255.255 depends on your subnet) worked perfectly in UDP broadcast. See this link for difference between them.

我之前遇到过同样的问题,这个页面建议使用 Android UDP 连接的网络层 广播地址而不是 255.255.255.255.

I had this same issue previously, THIS page suggests use of Network layer broadcast address instead of 255.255.255.255 for Android UDP connections.

这篇关于Android 广播到 255.255.255.255 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆