Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →