Nicht ganz ...
Wenn der Server auf Port 31337 lauscht, und sich ein Client da hin verbindet, muss der Client auch einen lokalen Port benutzen. Eine TCP Verbindung funktioniert also nur, wenn auf beiden Seiten ein Port das "Endstück" der Verbindung darstellt.
In deinem Fall:
Der Client, der noch keinen lokalen Port hat, will sich zu Port 31337 verbinden. Das OS teil dem Client den frei gewählten Port 4429 zu. Diesen kann man auch als "ausgehender Port" bezeichnen. Diese werden vom OS ausgewählt. Man kann sie auch von Hand auswählen, sollte man aber aus diversen Gründen nicht tun.
Die Verbindungsgrafik sieht dann also aus aus:
Client@4429 <-----> Server@31337
Es kann über diese eine Verbindung in beiden Richtungen kommuniziert werden. Allerdings klappt der Verbindungsaufbau hier nur von "links nach rechts".
Würdest du einen zweiten Client starten und in der Zeit keine andere Netzwerkverbindung aufgebaut haben, so hättest du vermutklich exakt das hier:
Client1@4429 <-----> Server@31337
Client2@4430 <-----> Server@31337
Windows zumindest inkrementiert diese "ausgehenden Ports" meist einfach.
Sogesehen teilen sich alle Client den Port 31337 als Zielport am Server. Mit Threads und Co. hat das nix zu tun. Der "Zielport" ändert sich also nicht. Das ist TCP/IP Protokoll-Sache.
- Alex