15

クライアント/サーバーJavaアプリを作成しようとしています。クライアントとサーバーの両方が同じWi-Fiネットワーク上で実行されます。サーバーは、クライアントが認識している特定のポートで実行されます。

サーバーを検出するために、その特定のポートのネットワークを介してクライアントからマルチキャストメッセージを送信することを計画しています。ただし、ネットワーク内のどのIPがメッセージを受信したかを確認する方法がわかりません。

サーバーが返信した場合に備えて、マルチキャストメッセージを送信したら、クライアントにソケットを作成し、着信パケットをリッスンする必要がありますか?

前もって感謝します。

4

4 に答える 4

18

(1)サーバーは事前に設定されたポートでリッスンします

DatagramSocket s = new DatagramSocket(8888);
s.receive  //(1)
s.send     //(2)

(3)クライアントは、ブロードキャストIPである255.255.255.255のポートにメッセージを送信します。

DatagramSocket c = new DatagramSocket();
c.send(255.255.255.255:8888,msg)     //(3)
c.receive  //(4)

クライアントもポートにバインドします。指定しなかったので、ランダムに選択しました。

(3)はすべてのローカルマシンにメッセージをブロードキャストし、(1)のサーバーはクライアントIP:portを使用してメッセージを受信します。

(2)サーバーはクライアントIP:portに応答メッセージを送信します

(4)クライアントはサーバーから応答メッセージを受け取ります。

于 2010-07-15T19:29:49.110 に答える
8

JGroupsを使用することを強くお勧めします。それは多くの機能を持っており、それはすべてのUDPのものを行います。JBossはそれをクラスタリングに使用します。

于 2010-07-15T19:08:01.000 に答える
4

使用してみることができjava.net.MulticastSocketます(Java 1.1以降で使用可能)。jgroupshazelcastなどのライブラリの豊富な機能セットが必要ない場合は、プレーンJavaAPIで十分に機能する可能性があります。

こちらこちらの サンプルページもご覧ください。

于 2012-11-21T15:49:07.460 に答える
1

SSDPを使用してみることができます。これは、UPnPデバイスがお互いを検出するために使用するものです。ポート1900でマルチキャストされ、非常に単純なパケットを使用してIPとサービス情報を送信します。

しがみつくことはあなたが引っ張ることができるUPnPlibです。UPnPに移行することはお勧めしません。使用される検出プロトコルのみです。

于 2010-07-15T19:13:25.640 に答える