【发布时间】: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