Sockets TCP avec multiples clients en Java

Application à réaliser

Le but de ce TP est de réaliser en Java une application distribuée de type client/serveur avec comme support de communication les sockets TCP.

Le serveur gère une liste de personne. Une personne est définie par 2 informations : son age et son nom. Le serveur attribue à chaque personne un identificateur unique.

Un client peut effectuer plusieurs requêtes :

L'implémentation des opérations de gestion de personnes est déjà faite via les classes du package donnees que vous intégrerez dans votre projet Java : donnees.zip (voir la documentation des classes).

Plusieurs clients doivent pouvoir être connectés simultanément au serveur.

Travail à réaliser

Un client doit pouvoir envoyer un nombre quelconque de requêtes au serveur.

Vous implémenterez 3 versions pour le serveur (ne nécessitant – presque – aucune modification du client pour passer de l'une à l'autre) :

  1. Une version mono-client qui ne gère qu'un seul client à la fois. Si plusieurs clients veulent faire des requêtes, l'accès au serveur est séquentialisé pour les clients : tant qu'un client reste connecté au serveur, les autres clients restent en attente.
  2. Une version multi-clients qui lance un thread pour gérer la communication avec un client lorsqu'il se connecte, ce qui permet à plusieurs clients d'envoyer des requêtes en parallèle au serveur. Vous prendrez soin de gérer l'accès concurrent aux données qui sont les mêmes pour tous les clients.
  3. Une version multi-clients avec un sélecteur au lieu de passer par du multi-thread pour gérer les requêtes parallèles des clients. Pour vous aider dans cette implémentation, récupérez la classe ServeurSelecteurNIO.java qui contient les méthodes de lecture/écriture d'un objet sérialisé dans une socket adaptée aux sélecteurs NIO.

Eric Cariou, dernière modification : 23/01/24