これが可能かどうかはまだわかりません。詳細がわかる場所を探しています。これは主に練習として行われていますが、私は2人の人の間で最小限の手間をかけて非常に大きなファイルを共有するソリューションとしてこれを実装できるかどうかを見たいと思っています(同様のソリューションが存在するかもしれませんが、試して書き込む)。ピア2ピア設定で2つのソケット接続を接続する方法
基本設定は次のとおりです。 ポートXYZでリッスンするプログラムでサーバーを構成すると考えています。私は2人のユーザ例(AとB)を持っています。ユーザ "A"は、ユーザ "B"とファイルを共有したい。 "A"は自分のローカルクライアントに行き、いくつかの情報をサーバーにプッシュします。彼は彼がユーザーの "B"に送ることができるキーを返します(しかし、場所を公開または放送する代わりに)。ユーザー "B"はキーを取得し、クライアントにそれを入れます。彼のクライアントはサーバーに行き、ファイル転送のためにユーザー "A"のマシンに接続する方法に関する情報を取得します。
これは、ソケットを介して直接接続できるマシンでは簡単ですが、ユーザーAとBが完全に異なるネットワーク上にあり、異なるパブリックIP(通常のインターネットユーザー)の背後にあると仮定しています。だから私が思ったのは、ユーザー "A"とユーザー "B"がサーバー上の状態を監視できるようにすることができます。そして、ファイルを共有する時間があることが明らかなときに、サーバーをブリッジとして使用して、ハンドシェイクを伝えた後、新しいソケットか、何らかの形でサーバーに接続されているソケットに参加しますか?この全部の注意点は、帯域幅をサーバーに転送しない(または単にサーバーに直接接続できる)ことですが、2台のマシン間で直接ピアツーピアにし、サーバーを使ってネゴシエートします接続。
しかし、私は私の好みは、Javaを使用することです、この情報に検索するには、またはそれが可能だ場合:)
さっぱりだが。
これはやはり私の考えでした...私はいくつかのVoIPプロトコル(SIPのようなもの)がこの能力を持っていると信じていますが、それで私は不思議に思います。 リスンポートを開いていると、それだけで十分です。しかし、「マップされた」とは、「通常の」ユーザーでは、特定のポートを割り当てて、そのポートをルータ/スイッチに転送することを意味していると仮定していますか? – AndyMac
はい、そのように接続ブローカー、I.E.サーバはクライアントにIPエンドポイントを提供し、P2Pを直接確立することになります。あなたが聞くポートを持っているかどうかに基づいてのみ、「サービング」が「ダウンロードのみ」であったことを判断することさえできます。 – Sabre
もう少し悲しいことですが、既に知られている接続への接続を仲介する方法はないようです(後で別のソケットに接続するために、あるソケットの接続情報を使用します)。面白いハックの全世界;) – AndyMac