1

データベースサーバーにデータを保存するクライアントをJavaで作成しています。これまでのところ、サーバーの IP とポートは、クライアントの設定で手動で指定する必要があります。ブロードキャスト/マルチキャスト/UDPを介してデータベースサーバーのIPを自動的に決定できると聞きました(これらの概念に精通していません)。質問: ローカル ネットワークで利用可能なすべてのデータベース サーバーの IP アドレスを取得する方法はありますか? これまでのところ、h2 データベース システムを使用しています。

さようなら、ヴォルフガング

4

2 に答える 2

1

データベースサーバーでUDPブロードキャストを使用してください:) これにより、ローカルネットワーク上のすべてのマシンでブロードキャストを取得でき、ブロードキャスト自体がサーバーのIPアドレスを運ぶことができます. ローカル IP を取得するには、次を使用しますInetAddress ip = InetAddress.getLocalHost();

http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramSocket.htmlから:

では、UDP ブロードキャスト送信は常に有効になっていDatagramSocketます。ブロードキャスト パケットを受信するには、aDatagramSocketをワイルドカード アドレスにバインドする必要があります。DatagramSocket一部の実装では、 a がより具体的なアドレスにバインドされている場合、ブロードキャスト パケットも受信される場合があります。

例:DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));どちらが同等か:DatagramSocket s = new DatagramSocket(8888);どちらの場合もDatagramSocket、UDP ポート 8888 でブロードキャストを受信できるようになります。

編集: ネットワーク上のすべての IP アドレスをフィンガーすることもできます。http://www.linglom.com/2007/02/20/how-to-find-subnet-number-ip-addresses-in-the-subnet-in-a-few-seconds/のアルゴリズムを使用して動作させますサブネット IP を取り出し、それらを繰り返し処理し、それぞれが H2 サーバーであることをテストします (接続を試みます)。複数のスレッドで検出を高速化することができます。

于 2010-03-12T13:08:58.313 に答える
0

動的なサービス検出のために独自のソリューションを再発明するのではなく、この目的のためにBonjour /Zeroconf ライブラリの使用を検討することもできます。

JMDNS 以外に bonjour/zeroconf 用の Java ライブラリはありますか? を参照してください。

于 2010-03-12T13:32:47.223 に答える