3

一部のコンピューター間でピアツーピア接続をセットアップして、ユーザーが外部サーバーなしでチャットしたりファイルを交換したりできるようにしたいと考えています。私の最初の考えは次のとおりです。

すべてのアプリケーションが接続できるサーバー上に中央の ServerSocket を作成します。この ServerSocket は、接続されたソケット (クライアント) を追跡し、新しく接続されたクライアントの IP とポートを他のすべてのクライアントに提供します。各クライアントは、すべてのクライアントが接続できる新しい ServerSocket を作成します。

ここに画像の説明を入力

つまり、すべてのクライアントには、他のすべてのクライアントが接続された ServerSocket があります。メッセージは、画像の青い線を経由する必要があります。

私が実行している小さな問題が 1 つあります。すべての異なる IP アドレスを使用してこれをテストすると、問題なく動作しますが、2 つのクライアントが同じ (外部) IP アドレスを持つ場合、それ以上動作しません。誰かがこれに対するスマートな解決策を知っていますか?

ありがとう!マルク

4

2 に答える 2

3

ホストが NAT ルーターの背後にあり、NAT の反対側からアクセスできるはずのサーバー ポートを開きたい場合、NAT ルーターは、このポートのすべての着信接続をこのホストに転送するように構成する必要があります。

明らかに、同じポートをリッスンする 2 つの異なるホストに対してこれを行うように NAT ルーターを構成することはできません。どのホストが各受信接続を処理することになっているかを知ることはできません。NAT の背後に 2 つのサーバーがある場合、それらは異なるポートを使用する必要があり、NAT ルーターは各ポートを各サーバーに転送するように構成する必要があります。

これは、ピア ツー ピア ネットワークの既知の問題です。その結果、両方とも NAT の背後にある 2 つのクライアント間の直接接続は、NAT の少なくとも 1 つがポート フォワーディング用に構成されている場合にのみ可能であり、したがって、もう一方のサーバーとして機能できます。

ソリューション:

非転送 NAT の背後でロックされている 2 つのクライアントを接続する回避策は、それらの間の仲介者としてサーバー対応の 3 番目のクライアントを使用する機能を追加することです。

2 つのクライアントが同じ NAT の背後にある場合、中央サーバーを介して LAN IP を交換し、これらを使用して相互に接続できます。

于 2012-11-23T13:58:59.193 に答える
0

これをインターネット経由で機能させようとする場合は、STUNを確認する必要があります。「すぐに使える」ライブラリがあるかどうかはわかりませんが、この記事を読んで始めてください。

于 2012-11-23T13:59:11.213 に答える