Aller au contenu

Application serveur

Note

L'application démo du serveur est disponible à l'adresse suivante : https://gitlab.com/sebastien.huneault.cegep.public/420-4p8-client-serveur/Sockets-TemplateServer

Explication du code

Pour écouter, le serveur doit ouvrir un socket sur un port spécifique. Afin de pouvoir fonctionner sans les droits administrateurs, un port supérieur ou égal à 1024 devra être utilisé. Par défaut, le serveur écoutera sur toutes les adresses IP disponibles.

// Écouter sur le port
ServerSocket serverSocket = new ServerSocket(8080);

Une fois l'écoute démarrée, on pourra attendre une connexion client. Le code sera alors bloqué jusqu'à ce que le client soit connecté et que la connexion soit acceptée.

// Attendre la connexion et l'accepter
Socket clientSocket = serverSocket.accept();

Maintenant que la connexion est établie, il faut une façon de pouvoir communiquer. L'utilisation d'un PrintWriter et d'un BufferedReader, connectés aux flux du client et du serveur, serviront de moyen de connexion.

// Obtenir les flux d'entrée et de sortie
PrintWriter socketOut = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader socketIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

Envoyer du texte au client s'effectue de la même manière que d'écrire à la console : à l'aide des méthodes println() et printf(). Pour lire du contenu, on utilise les mêmes méthodes que pour lire à la console avec un Scanner, c'est-à-dire avec les fonctions readLine() ou read().

// Afficher un message de bienvenue
socketOut.printf("Bienvenue! Comment vous appelez-vous? \n");

// Obtenir le nom
String name = socketIn.readLine();
System.out.println("DEBUG: Message du client: " + name);

// Afficher une salutation
socketOut.printf("Bonjour, %s!\n", name);

À la fin de la communication, il est bien important de fermer la connexion du client (pour l'informer que la communication est terminée) ainsi que la connexion du serveur (pour libérer le port à d'autres applications).

// Fermer la connexion
clientSocket.close();
serverSocket.close();

Tester avec ncat

Pour tester notre serveur, l'idéal est d'utiliser un client simple qui ne requiert pas de protocole spécifique. netcat est un outil idéal pour ce genre de tests.

Finalement, en se connectant à l'adresse IP du serveur sur le port spécifié, on pourra tester rapidement le fonctionnement de notre application serveur.

Note

Sous Linux, la commande serait plutôt nc <ip> <port> ou netcat <ip> <port>