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.
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.
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).
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.
- Sous Linux, la commande nc est généralement disponible directement
- Sous Windows, il faut installer nmap pour avoir la commande ncat disponible https://nmap.org/dist/nmap-7.94-setup.exe
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>