2017-01-24 12 views
1

クライアントがポート80でリッスンしているソケットを持っているとします。このソケットは、別のポートで待機するサーバーソケットに接続できますか?またはサーバーはポート80でもリッスンする必要がありますか?2つの接続されたソケットが異なるポートでリッスンできますか?

タイプAF_INETのネットワークソケットを参照します。

+0

達成したいことが明確ではありません。多分あなたは最初にソケットに関する良い紹介記事を読むべきでしょうか? – Olaf

答えて

3

TCP接続の2つの異なる端にあるポート番号が同じである必要はありません。実際、彼らはほとんどありません。

クライアントが接続先を知ることができるように、サーバーソケット(リッスンするサーバーソケット)を既知のポート番号(HTTPの場合は80など)にバインドする必要があります。クライアントソケットがサーバーに接続すると、通常はランダムに選択された使用可能なローカルポート番号が使用されます。クライアントは、接続する前に特定のポートにバインドするオプションを持っていますが、これは必須ではありません。

TCPソケットは、ローカルIP、ローカルポート、リモートIP、リモートポートの4つの値で定義されます。このため、特定のリモートIPとポートにそれぞれ接続された複数のクライアントソケット(すべて同じローカルIPで、ポートは異なる)を持つことができます。

+0

ありがとうございます!それは私の質問に答える!クライアントがランダムなポートを選択した後、OSはサーバーにどのポートが正しく選択されたかを伝えます。もう一度、あなたの答えをありがとう! –

+0

@DanielOliveiraはい、サーバーが新しい接続を受け入れると、クライアントのIPとポートはパラメータで 'accept'関数に返されます。 – dbush

関連する問題