Wi-Fi経由でテキストメッセージを送受信するAndroidアプリを開発しています。この通信にはTCPソケット(IPアドレスとランダムポート)を使用しますが、問題は、ルーターの「ポート転送セクション」からこれらのポート番号を許可しないと、メッセージを送信できないことです。この問題を取り除く方法はありますか?
2 に答える
両方のクライアントが異なる制限付きファイアウォールの背後にある場合は、両方のクライアントが 3 番目のサーバーとの接続を開くホールパンチングを調べる必要があります。3 番目のサーバーは、NAT で開かれたポートを予測します: Java を使用した NAT トラバーサル、https://stackoverflow.com /questions/917385/nat-traversal-with-java/ . ここで説明するように、これは通常、P2P アプリケーション (つまり、クライアントからクライアントへ) に必要であることに注意してください。はい、それは恐ろしく複雑で厄介です:(
Amazon Cloud Services のようなものを使用してメッセージをクラウドに保存し、プッシュベースのメカニズムを使用して、おそらくロング ポーリング HTTP を使用して、メッセージの受信時に相手に通知する方がよい場合があります。
選択した範囲内からランダムにポートを選択し、ルーターでその範囲を次のように転送できます。
int ポート = (Math.abs(random.nextInt())) % 3000 + 1024;
このようにして、1024 から 2999 の間の乱数を生成しました。または、固定ポートを選択します。