programmation Java (école d'ingénieur) · Chapitre 16 · Application directe du cours
Port déjà occupé
Réseau : sockets client/serveur · niveau 1 (application)
Énoncé
On lance deux fois de suite java ServeurEcho, dans deux terminaux. Que se passe-t-il pour le second ? Écrire un programme qui reproduit la situation dans un seul processus (deux ServerSocket sur le même port) et affiche le message de l'exception. Comment demander au système un port libre quelconque ?
Corrigé
Le second serveur ne peut pas écouter sur un port déjà pris : la création du ServerSocket lève une BindException.
try (ServerSocket premier = new ServerSocket(5003)) {
System.out.println("Premier serveur sur le port " + premier.getLocalPort());
try (ServerSocket second = new ServerSocket(5003)) {
System.out.println("Second serveur ?!");
} catch (BindException e) {
System.out.println("Second serveur : " + e.getMessage());
}
}
Premier serveur sur le port 5003
Second serveur : Address already in use
Avec new ServerSocket(0), le système choisit un port libre ; getLocalPort() indique lequel (il faut alors le communiquer aux clients). Le même message apparaît souvent quand on relance un serveur qu'on croyait arrêté : il tourne encore dans un autre terminal.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.