22

2 つの Android デバイス間で TCP/IP 接続を確立したいと考えています。とりあえず、接続デバイスをデバイスにした方が簡単だと思いました。そのため、2 台の電話の間にサーバーはありません。

ほとんどの場合 (常にではありませんが)、実際の IP アドレス (NAT など) はありません。これは TCP ソケットを作成する際の問題ですか? これに関する正確な情報を見つけることができませんでした。アドバイスやご意見をお待ちしております。

ありがとう

4

5 に答える 5

11

これは TCP ソケットを作成する際の問題ですか?

答えはノーです。それが不可能になるわけではありません (NAT が IP アドレスをマッピングする予測不可能な方法を持っていない限り)。ただし、達成するのは簡単ではありません。

簡単に言えば、NAT の背後にあるピア間の初期通信を容易にするために、パブリック IP アドレスを持つサーバーのようなピアが常に必要になるということです。ピアはそれに接続します。A は、サーバーに B との TCP 接続を希望することを伝えます。サーバーは B に通知します。NAT の動作分析が実行され、可能であれば、A と B は、他のNAT の次のマッピングを予測することによって、相互に TCP 通信を開こうとします。すべてがうまくいけば (通常はうまくいきます)、A が B のベースにタッチするか、その逆です。それらは、他の接続試行を閉じ、動作中の TCP 接続と通信します。この手法は、TCP の STUN と呼ばれます。

さて、物事がうまくいかない理由はもっと複雑です。詳細については、私が書いた Practical JXTA II という本を Scribd でオンラインで読むことができます。NAT トラバーサル専用の章があります。

お役に立てれば。

于 2011-05-17T02:58:15.800 に答える
0

NATの背後にある1つのデバイスは問題ではありません。要件は次のとおりです。サーバーはクライアントから到達可能である必要があります。

TCP接続を処理するためにApacheMinaを使用しています。それは本当に私の人生を楽にしてくれました。クライアントとサーバーの両方で使用できます。試してみる...

于 2010-12-24T20:01:33.930 に答える
0

両方のノードがグローバル IP を持っておらず、物理的に同じネットワーク内にない場合、ノードに変更を伝えるリレーとして機能する制御サーバーを作成しない限り、サーバーなしで TCP 経由で通信することは不可能です。反対側で発生

于 2011-05-19T13:12:32.030 に答える
0

TCP ソケットを作成するには、1 つのデバイスがリッスンしていて、もう 1 つのデバイスが接続している必要があります。ただし、実際のシナリオでは、あなたが説明することはちょっと難しいです。2 台の電話間で携帯電話ネットワークを介して通信する場合と同様に、ネットワークがそのような電話へのインバウンド接続を許可せず、各電話の IP をサンドボックス化したとしても驚かないでしょう。そのため、2 台の電話が同じサブネット IP 範囲にある場合でも、それらが同じ物理ネットワークにない可能性があるため、ルーティングの問題全体がほとんど不可能になります。

ネットワークを制御していて、Wifi を使用し、ネットワーク内の両方のデバイスで自分で IP を nat している場合は、他のクライアント サーバー TCP ソケットと同じようにこれを行うことができます。

于 2010-12-25T04:02:49.827 に答える
0

可能ですが、いくつかの問題が発生する可能性があります。まず最初に、連絡したいホストの公開アドレスを知る必要があります。2 つのホストが異なる NATTED ネットワークにある場合は、何らかのサーバーを使用して行う必要があります (SIP テレフォニーで行うように)。次に、接続されたホストが「フルコーン」などの「良い」NATの背後にあり、着信接続を許可しない「対称」のような「悪い」NATの背後にないことを期待する必要があります。UDP データグラムの代わりに TCP 接続を使用すると、スリーウェイ ハンドシェイクのために役立ちます。実際、ほとんどの NAT ルーターは着信 TCP 接続を受け入れますが、着信 UDP パケットは受け入れません。

于 2011-05-20T18:07:02.140 に答える