私は、ソケットやJavaを使用してチャットプログラムを書いていると私は、サーバがリッスンするポートを指定する必要があります。
ここで私が持っている質問は以下のとおりです。
どのように私は、そのポートが常に無料であることを確認することができますか?
別のプログラムはまた、そのポートで待機しているかどうかは重要ですか?
ポートは自由である必要があり、デフォルトのポートが占有されている場合は、どのように私は、ポート番号の変更をクライアントに通知しますか?
私はちょうどそれがそうサーバは、空きポートが見つかるまで、ポート番号をインクリメントし、新しいポートにバインドしようとし続けて作るべきでしょうか?
どのように私は、そのポートが常に無料であることを確認することができますか?
あなたは、ポートが利用可能であるかどうかを確認するには、「netstatコマンド」を使用することができます。あなたは介してサービスによって使用されているすべてのポートを一覧表示することができます。
netstat -anp
あなたが特定のポートを検索したい場合は、使用することができます。
netstat -anp | find "port number"
例えばnetstat -anp | find ":8080"
。
別のプログラムはまた、そのポートで待機しているかどうかは重要ですか?
伝統的な外観からは、はい、TCPのためにあなたは一度だけで、同じポートと同じローカルIPアドレス上の一つのアプリケーションのリスニングを持つことができます。あなたは、複数のネットワークカードまたは仮想ネットワークインタフェースを使用するか、複数のローカルIP住所がを持つことで、同じポートを使用することができます。
しかし、使用しているようだSO_REUSEPORT
あなたはそれを再利用することができるかもしれソケットオプションを、チェックし、これを詳細については。
ポートは自由である必要があり、デフォルトのポートが占有されている場合は、どのように私は、ポート番号の変更をクライアントに通知しますか?私はちょうどそれがそうサーバは、空きポートが見つかるまで、ポート番号をインクリメントし、新しいポートにバインドしようとし続けて作るべきでしょうか?
個人的に私はどちらか常に無料または私は通常、自由で一つ一つをしようと知っていたポートの小さなリストでポートを選択します。
ポートを選択するための親指の一般的なルールは、ポートが別のサービスですでに使用された場合でも、また、1024以下で少なくとも4桁の番号と回避何かを選ぶ含まれ、あなたが他のポートに耳を傾け、それを再度割り当てることができ、そのあなたのすべての後にネットワーク。