2009-07-21 8 views
1

私はJavaアプリケーションを作成しています。TCP接続を確立するために、有線または無線のローカルネットワーク上で実行中のクライアントをすばやく検出する必要があります。Wi-Fiネットワーク上のクライアントの検出

これを行う最善の方法は何ですか?これを行うライブラリやコードスニペットはありますか?

+0

私はクライアントに接続するためにtcpを使用しているかもしれませんが、クライアントを見つけるためにtcpを使う必要はありません。 また、最終ターゲットマシンは普通の192.168.1.1タイプのホーム私のネットワークであると仮定して贅沢することはできませんが、あらかじめ定義されたコンタクトサーバを設定することはオプションではありません –

答えて

0

サブネット内のすべてのIPでアプリケーションのポートをスキャンする必要があると思います。

利用可能なIPは何ですか?つまり、そのサブネットは何ですか?
ネットワークがアプリケーションに透過的になるように設計されているため、これが不可能になる可能性があります。

だから、私はブルートフォースを使うでしょう:あなたのIPを選び、最後のバイトを変更してください。あまりにも多いかもしれませんが、十分ではないかもしれません。

ブロードキャスト(通常はx.x.x.255をターゲットとする)を送信し、誰が回答するかを確認します。 Datagram BroadcastingおよびMulticastsを参照してください。しかし、私はもうTCP/IPではないと思います。

+2

いいえ、これは非常に悪いアプローチです。ブロードキャストは新しいサービスにとっては受け入れられるとは考えられていません。もちろんIPですが、TCPはユニキャストだけです。ネットワーク上でサービス検出を実行するには、mDNSまたはSSDPを参照してください。 –

1

ネットワークスキャンは、ワイヤレスネットワーク上では非常に長く、さらに長くなることがあります。 Javaを使用してそれらをすばやく必要とする場合は、ネットワーク上に「ミーティングポイント」サーバーを実装することができます。このサーバーは事前定義されたポートをlistenし、クライアントは始動時にサーバーに登録され、サーバーは要求に応じてクライアントに関する情報を配布できます。

HTH。

8

マルチキャストUDPはこれを行う良い方法です。これは、ローカルIPネットワーク(UPnPとZeroConf)を介したネットワークデバイスの自動検出をサポートするいくつかの技術で使用されています。

マルチキャストUDPはTCPではありませんが、IPに基づいているため、同じアドレス機構、つまりIPアドレスを使用します。これは、ラジオ放送と比較されることが多い。すなわち、マルチキャスト送信者は、1つのメッセージを送信するだけでよい(すなわち、ブロードキャストのようである)が、マルチキャストチャネルに「チューンイン」されたクライアントだけがそれを受信する。

あなたはスターターとしてこれらのためにGoogleやWikipediaの迅速な検索を行うことができますが、次のように基本的な考え方は次のとおりです。

  • クライアントの起動時に、それがマルチキャストUDP、「Hello」メッセージを送信しますいくつかのあらかじめ指定されたマルチキャストアドレスとポート(例えば、UPnPは239.255.255.250:1900を使用します)
  • 既存のクライアントは、指定されたアドレスとポートで着信マルチキャスト "hello"メッセージを待ちます。送信者
  • "hello"メッセージを送信しているクライアントは、n個の既存の各クライアントからの応答を受信します現在各クライアントのIPアドレスを知っています

使用するライブラリを探しているなら、UPnPライブラリは少し重い傾向があり、多くの人々は一般的にそれらを好まないので、ZeroConfもう少し適切かもしれない。私はそのようなことのJavaの実装を知らないが、私はあなたが少し掘っていくつかを見つけることができると確信しています。

+0

非常に良い答えです。 mDNSとSSDPのどちらかを選択するには、mDNSは実際には送信されたパケット数の点でSSDPより重いです。どちらも類似の発見モデルを持っています。 OSには通常、mDNSデーモンが既に実行されています(BonjourまたはAvahi)が、SSDPの場合はWindowsの場合を除いて自分自身を起動する必要があります。 –

0

信頼できるマルチキャスト通信用にJGroupsツールキットがあります。他の回答に記載されているように、マルチキャスト技術を使用して追加のクライアントを自動的に検出することができます。

また、マルチキャストソケットの上に通信APIを提供します。

JBoss、Tomcatなどの多くのプロジェクトで、分散キャッシュのインフラストラクチャを提供するために使用されています。詳細hereを参照してください。

関連する問題