中間サーバーなしでピアとファイルを共有する必要があるプロジェクトが与えられました。ネットワーク上でオンラインになっているホストの数を知る方法と、それらに接続する方法を知りたいです。Java を使用して、コンピューターのホストのルーティング テーブルを大まかに作成する必要があります。
3 に答える
ルーティングを追跡する必要はありません。必要なのは、エンドポイントのアドレスを知ることだけです。
このホストとの接続を確立することにより、ホストがネットワークに接続されているかどうかを確認できます。
あなたは中間サーバーがないと言ったので、NATホールパンチングはあなたの質問の範囲外です.
出発点として、java.net.Socket
クラスのドキュメントを見てください。
これはプライベートネットワーク上にあると仮定します。比較的封じ込められているもの。彼らにインターネットでお互いを見つけさせるのは悪夢のように聞こえます。
したがって、これを考えると、ピアがお互いを見つけるための1つのモデルは、標準化されたポートのシーケンスとアライブ信号を選択することかもしれません。次に、ピアが他のピアを検索すると、ネットワーク上のすべてのIPを通過し、そのポート番号で要求を行います。アライブシグナルを取得すると、それをテーブルに追加します。信号を送ったコンピューターは、新参者も記録する必要があります。
ネットワーク上で一般的に使用されないように、ポートシーケンスを選択する必要があります。(かなり大きい)検索を高速化するために優先されるようにシーケンスと言います。
検索をさらに高速化するために、アライブシグナルが送信されると、ピアテーブルとチェックしたIP(および同じ方法で受信したIP)を送信することもできます。次に、プログラムの新しいインスタンスを持つ古いIPが自身を確立するため、新しいピアはネットワーク上の新しいIPをチェックするだけで済みます。
お役に立てば幸い