Javaのドキュメントによると、たとえば、ポートをリッスンしている、は、ServerSocket
そのメソッドから次のような新しい、を返します。x
5555
Socket
y
accept()
のローカルポートは;
y
に設定されています。5555
とx
5555
ポートでaccept()
新しい接続をリッスンし続けます。
上記が実際に当てはまることを確認しました。
ただし、ポートに関するこのウィキペディアのエントリには、次のように書かれています。
このプロセスはリスニングと呼ばれ、既知のポートで要求を受信し、別のプライベートポートで1対1のサーバークライアント通信を再確立して、他のクライアントも既知のサービスポートに接続できるようにします。
私にとって、上記のウィキペディアの抜粋はより理にかなっている傾向があります...私がTCP / IPについて読んで理解したことから、
宛先IPアドレスは、パケットを適切なホストに配信するのに役立ちます。と
宛先ポートは、宛先ホスト上の適切なプロセスにパケットを配信するのに役立ちます
したがって、Javaでのドキュメントと動作を考えるとaccept()
、マルチスレッドクライアントがマルチスレッドサーバーと通信しようとした場合(各スレッドに1つずつ、2つの通信チャネルを開くことによって)、パケット配信をどのように実現できるのでしょうか。このような場合、すべてのパケットに同じ宛先IPアドレスとポート値が設定されている場合、Java(または基盤となるTCP / IPスタック)はどのパケットがどのチャネルに属しているかをどのように知るのでしょうか。
編集:以下のEJPの回答とニコライのコメントをご覧ください。彼らによると、上記のウィキペディアの主張は間違っていました。EJPは先に進み、ウィキペディアのエントリを修正しました。