2017-06-30 1 views
0

J'ai cherché sur Internet pour certaines solutions à mon problème, mais je ne peux tout simplement pas faire le travail de diffusion 255.255.255.255.Android de diffusion au 255.255.255.255 ne fonctionne pas

 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(); 

Quand il arrive à la ligne socket.bind(sAddress), il jette une exception "ne se lie pas". J'ai également essayé de "sauter" cette ligne de liaison, le socket envoie le paquet mais les autres machines ne reçoivent jamais ce paquet.

Étrangement le code ci-dessous fonctionne très bien, mais envoie uniquement le paquet à 192.168.25.8, et j'ai besoin d'une émission à la place:

 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(); 

Il y a les autorisations manifeste 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" /> 

Tout le monde peut Aidez-moi?

+0

vous pouvez essayer cette ip à diffuser: 172.16.0.0 voir https://en.wikipedia.org/wiki/Broadcast_address – nafas

+0

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

+0

Est-ce que ma réponse vous a aidé? – Kaushal28

Répondre

1

Dans mon cas, au lieu d'utiliser global broadcast address (255.255.255.255), l'utilisation de Network layer broadcast address (192.168.25.255 ou 192.168.255.255 dépend de votre sous-réseau) a parfaitement fonctionné dans UDP diffusion. Voir this link pour la différence entre eux.

J'ai eu ce même problème précédemment, THIS page suggère l'utilisation de l'adresse de diffusion Network layer au lieu de 255.255.255.255 pour les connexions UDP Android.