2012-10-15 22 views
7

TCP接続のランダムなポート番号を生成しようとしています。投稿者:http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers私は1024から49151までのポート範囲が予約されていないことを知っていますが、そのうちのいくつかはUDPだけです。どのように有効なTCPポート番号を生成できますか?TCPの許容ポート範囲

+1

1024を超えるものはすべて、TCPクライアントにとって問題ありません。ウィキペディアのページに「受け入れ可能な」TCPポートを表示する必要がある場合は、これをあまりにも多く考えています。すべてのTCPポート= 1024未満は、クライアントソケットソースポートで許容されます。 –

答えて

15

ポート0にバインドすると、OSは有効で使用されていないポートを選択します。

任意ではなくランダムである必要がある場合は、49152-65535からのものは、このような自動使用で安全である必要があります。その範囲内の乱数を選択するだけです。 (ただし、そのポートが使用中であると判明した場合は、再試行する必要があるかもしれません)

+0

その範囲内のどのポートもTCPをサポートしますか? wikiページから、一部のポートはUDP用にマークされているだけなので。また、ポートが使用されている場合、どのようにJavaでチェックインするのですか?ありがとう! –

+1

1-65535のすべてのポートがTCPをサポートしています。そのページに表示されているTCP/UDPは登録済みのポートを参照しています。つまり、特定の用途に割り当てられたポートです。ポートが使用中であるかどうかを確認するには、通常、バインドしようとしているだけです。ポートが使用中であるというエラーが戻った場合は、そのポートが使用中です。あなたが得るポートは問題ではなく、ポートを取得するだけであれば、ポート0をバインドして新しいポートからローカルポートを取得して、取得したポートを見つけなければなりません。 – Eric

+2

少し詳しく説明すると、ローカルサーバーは特定のポートにバインドしますが、UDPとTCPは異なる「名前空間」にあり、独立しています。 _both_を使用するサーバーは、通常、両方のポート番号を同じにします。 _Connections_は、プロトコル、local-addr、local-port、remote-addr、remote-portの5タプルで定義され、クロストークなどが発生しない理由を説明しています。 –

関連する問題