Maison > Java > javaDidacticiel > Recevoir une diffusion UDP depuis un PC sur Android

Recevoir une diffusion UDP depuis un PC sur Android

Susan Sarandon
Libérer: 2025-01-02 19:27:38
original
884 Les gens l'ont consulté

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();
Copier après la connexion
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());
        }
    }
Copier après la connexion

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" />
Copier après la connexion

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);
    }
}
Copier après la connexion
<service android:name=".on_wait.WaitBoardCastService"/>
Copier après la connexion

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();
}
Copier après la connexion

Mes résultats :

Receive UDP Broadcast from PC on Android

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal