Maison >Java >javaDidacticiel >Recevoir une diffusion UDP depuis un PC sur Android
Cet article explique comment recevoir des diffusions UDP depuis un PC sur votre téléphone mobile.
Terminons d'abord l'implémentation du code côté PC., ce qui est très simple.
private final ScheduledExecutorService askService= Executors.newSingleThreadScheduledExecutor();
public void runWaitConnectThead(){ askService.scheduleAtFixedRate(this::sendAskMessage, 0, boardCastConfig.getWAIT_MS(), TimeUnit.MILLISECONDS); } protected void sendAskMessage(){ byte[] message = this.hostName.getBytes(); try (DatagramSocket datagramSocket = new DatagramSocket()) { datagramSocket.setBroadcast(true); InetAddress boardcastAddr = InetAddress.getByName("255.255.255.255"); DatagramPacket datagramPacket = new DatagramPacket(message, message.length, boardcastAddr, 1885); datagramSocket.send(datagramPacket); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } }
Dans le deuxième bloc de code ci-dessus, AskService démarrera immédiatement (le deuxième paramètre) et continuera à exécuter la fonction "sendAskMessage()", qui diffuse le paquet UDP, toutes les millisecondes boardCastConfig.getWAIT_MS(). Dans mon code, cela se répète toutes les 5 secondes.
Maintenant, vous avez atteint 50 % de réussite.
Avant d'écrire notre code de réception, nous devons ajouter quelques autorisations dans le fichier AndroidMnifest.xml, sinon votre application ne pourra pas s'exécuter.
Voici les autorisations :
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
Créons ensuite un service dans MainActivity et implémentons-y notre code de réception. Au fait, n'oubliez pas d'ajouter ce service dans le fichier AndroidManifest.xml.
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent waitBoardCastService=new Intent(this, WaitBoardCastService.class); startService(waitBoardCastService); } }
<service android:name=".on_wait.WaitBoardCastService"/>
Ensuite, nous pourrons terminer notre code de réception. Il contient deux parties.
①créez un nouveau fil de discussion (je ne l'ai pas montré dans mon code, mais c'est très important, vous ne pouvez pas démarrer votre application si vous avez quitté le fonctionnement du réseau dans le fil principal)
②acquisition du verrouillage multicast (cette étape est extrêmement importante, sans cela, vous ne pouvez pas recevoir de paquet UDP)
③réception du paquet UDP
WifiManager wifi =(WifiManager)getSystemService(MyApplication.WIFI_SERVICE); WifiManager.MulticastLock lock = wifi.createMulticastLock("any_tag"); lock.acquire(); try { DatagramSocket socket = new DatagramSocket(1885); byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); Log.v("hello","waiting"); socket.receive(receivePacket); String receiveMessage = new String(receivePacket.getData(), 0,receivePacket.getLength()); Log.v("hello","received!"); socket.close(); } catch (IOException e) { Toast.makeText(MyApplication.getContext(), "NetWork Error",Toast.LENGTH_LONG).show(); } finally { lock.release(); }
Mes résultats :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!