0

クライアントのリモート ポート番号で応答するために、Google AppEngine にデプロイされたサーブレットを使用しています。HttpServletRequest.getRemoteAddr() は正常に動作しますが、getRemotePort() は 0 を返しますか?

ポート 0 は無効です。通常のポート番号 (55046 など) を教えてくれた他の IP サービスを試しましたが、ブラウザまたは Java コードからアクセスするたびにサーブレットが 0 を返します。

私の最終的な目標は、ルックアップ時に接続開始者に受信者のアドレスと外部ポートの場所を伝えて、TCP ホール パンチ技術が適切に機能するようにすることです。

これの理由は何ですか?実際のポート番号を取得するにはどうすればよいですか (可能な場合)? NAT ルーターはプロキシ ポートを使用しませんか?

4

1 に答える 1

0

getRemotePort が 0 を返す理由はわかりませんが、クライアント ポートが役に立たないという最終目標のためには。クライアント ポートは、接続ごとに再割り当てされます。実際、最初の接続で 55046 を使用する場合、クライアント ポートの要点は、新しい接続で別の未使用のクライアント ポート番号を使用することです。

これにより、ファイアウォール ポリシーの穴を構成するための役に立たない情報になります。クライアント ポートは必要ありません。必要なのは、サーバー ポート、サーバー アドレス、およびクライアント アドレスからのアクセスのみを許可する場合はオプションのクライアント アドレスです。

于 2012-04-16T20:42:28.603 に答える