分散アプリケーションで、さまざまなホストが同じLAN内のローカルサーバーを見つける必要があります。AndroidでUDPデータグラムを使用して2つのプロセスと2つのホスト間で通信する方法
NsdManagerを使用してローカルサーバーを検出するのは成功していませんでしたが、この方法はサーバーには見られません。私はより良い解決策、より信頼できるものを探しています。
次に、UDPパケットをマルチキャストしようとしましたが、同じプロセス内で問題が検出されません。 (私の単体テストはクライアントインスタンスとサーバインスタンスの両方を使用します)。それはうまく動作します。同じクラスでは、クライアントが同じデバイス上で実行されているサーバーを検出できません(クライアントとサーバーは別々のプロセスアプリケーションです)。
次に、同じプロセス内でブロードキャストアドレスを使用してアプローチを変更しました。単体テストは問題ありませんが、2つの異なるプロセスではサーバーは見つかりませんでした。
前述のように、コードは同じプロセス内で正常に動作しますが、2つの異なるプロセス、または同じLAN内の2つの異なるクライアント/サーバーホストで動作する場合は機能しません。
注:私のLANはハイエンドのWiFiルーターであり、特別な設定はありません。
誰かが何か問題があるかもしれませんか?
私のマニフェストは、クライアントとサーバーの両方のアプリケーションのために、これらの設定が含まれていることを注意:
<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_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
注同じホスト上で実行しているサーバーを検出するために、私のクライアントのために、私はすでにTCPソケットを使用していますが、私が必要とします自分のLANにあるサーバーを検出します。
問題はあなたのコードにあります。 Q w.r.t [mcve](https://stackoverflow.com/help/mcve)を編集します。 UDP通信は、どんな種類のプロセスにも依存することができません。 – Onik
私のコードは、クライアントとサーバーの両方が同じプロセス内で動作しているユニットテスト内にある限り、マルチキャストパケットとブロードキャストUDPパケットの両方でうまく動作します。したがって、2つの別々のクライアントとサーバーアプリケーションを実行すると、2つの別々のプロセスがあり、私のコードはデータグラムを読み取ることができません。 – Bamaco
正確に同じコードは、サーバーとクライアントの両方が同じプロセスに存在する場合にデータグラムを読み取ります。問題は、両方のアプリケーションが別々のホストとアプリケーションで実行されている場合です。 – Bamaco