ということで、NATトラバーサルをしている最中でした。
シナリオは次のとおりです。私は 2 台の Android 携帯を持っており、HTTP サーバーを使用してそれら (ソケット) を接続したいと考えています (両方のデバイスが NAT の背後にあります)。
これまでのところ、両方のクライアントが HTTP サーバーに接続し、HTTP サーバーが IP アドレスとポートを記録し、
ただし、Java HttpDefaultClient() を使用しているため、クライアントからサーバーにリクエストを送信するたびにポートが変更されるため、少し問題があります。単純な問題のように思えますが、Socket() を使用して、サーバーへの有効な TCP 接続を実際に維持してみましょう。
public Socket(InetAddress アドレス、int ポート、InetAddress localAddr、int localPort) が IOException をスローする
このクラスを使用して、localPort をランダムに配置します。これを覚えておきます。今度はすべてをやり直しますが、今回はポートが変更されないようです。
対戦相手の IP とポート (彼も NAT の背後にいる) を取得した後、理論的には、SERVER 接続をドロップして、実際に clientServer をホストするために既に使用したものと同じ localPort を使用できますか?
1) HTTP サーバーソケットをドロップすると、NAT はそれを理解し、ポートマッピングを削除しますか? (それは悪いことです) 2) 対称コーン nat を実際に渡す方法は? 3) STUN ライブラリは何らかの方法で動作しますか?