2017-06-30 89 views
0

我一直在网上搜索一些解决方案o我的问题,但我根本无法使255.255.255.255广播工作。Android广播到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" /> 

谁都可以帮帮我?

+0

你可以试试这个ip来广播:172.16.0.0看到https://en.wikipedia.org/wiki/Broadcast_address – nafas

+0

https://stackoverflow.com/a/15913678/2657100 – nandsito

+0

我的回答对你有帮助吗? – Kaushal28

回答

1

在我的情况,而不是使用global broadcast address(255.255.255.255),使用Network layer broadcast address(192.168.25.255或192.168.255.255取决于你的子网)在UDP广播完美。请参阅this link了解它们之间的差异。

我以前有过这个问题,THIS建议使用Network layer广播地址代替255.255.255.255用于Android UDP连接。