Le diagramme est incorrect (et figure dans le unconfirmed errata sur le site O'Reilly).
Le client choisitson port au hasard (vous n'avez pas besoin de faire quoi que ce soit spécial en Java) et se connecte au serveur sur le port selon que vous avez spécifié. En utilisant l'outil de ligne de commande netstat
vous pouvez voir cela - d'abord, juste le socket serveur d'écoute sans clients:
[email protected]:~$ netstat -n -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
...
tcp46 0 0 *.5050 *.* LISTEN
...
(il y a beaucoup d'autres entrées, je viens enlevé les non apparentés)
maintenant, avec 1 client connexion de l'hôte local (127.0.0.1):
[email protected]:~$ netstat -n -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
...
tcp4 0 0 127.0.0.1.64895 127.0.0.1.5050 ESTABLISHED <- 1
tcp4 0 0 127.0.0.1.5050 127.0.0.1.64895 ESTABLISHED <- 2
tcp46 0 0 *.5050 *.* LISTEN <- 3
...
depuis le client se connecte à partir de la même machine, nous voyons deux connexions établies - un du client au serveur (1), l'autre du serveur au client (2). Ils ont des adresses locales et étrangères opposées (puisqu'ils communiquent entre eux) et vous pouvez voir que la fin du serveur utilise toujours le port 5050 alors que le socket serveur d'origine (3) continue à écouter sur le même port.
(ceux-ci sont de Mac, mais Windows/Linux ont également netstat
donnant une sortie similaire)
Essayez getLocalPort et voyez si c'est vrai. – Codemwnci
Est-ce un bon livre que vous lisez? "simple vieille prise" me semble bizarre. –
Oui, c'est Head First Java, un livre pour les débutants. – Eugene