ホームページ > Java > &#&チュートリアル > Android で PC から UDP ブロードキャストを受信する

Android で PC から UDP ブロードキャストを受信する

Susan Sarandon
リリース: 2025-01-02 19:27:38
オリジナル
842 人が閲覧しました

この記事では、携帯電話で PC から UDP ブロードキャストを受信する方法を実装します。
まず、非常に簡単な PC 側のコード実装を完了しましょう。

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());
        }
    }
ログイン後にコピー

上記の 2 番目のコード ブロックでは、askService がすぐに開始され (2 番目のパラメーター)、boardCastConfig.getWAIT_MS() ミリ秒ごとに UDP パケットをボードキャストする関数「sendAskMessage()」を実行し続けます。私のコードでは、5 秒ごとに繰り返します。

これで、50% の成功を達成しました。
受信コードを記述する前に、AndroidMnifest.xml ファイルにいくつかの権限を追加する必要があります。そうしないと、アプリケーションは実行できません。
権限は次のとおりです:

    <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" />
ログイン後にコピー

次に、MainActivity でサービスを作成し、その中に受信コードを実装しましょう。ちなみに、このサービスを 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"/>
ログイン後にコピー

これでコードの受信を完了できます。 2 つのパートが含まれています。
①新しいスレッドを作成します(コードには示していませんが、これは非常に重要です。メインスレッドでネットワーク操作を残した場合、アプリケーションを起動できません)
②マルチキャストロックの取得(このステップは非常に重要です。これがないとUDPパケットを受信できません)
③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();
}
ログイン後にコピー

私の結果:

Receive UDP Broadcast from PC on Android

以上がAndroid で PC から UDP ブロードキャストを受信するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート