Serveur de "tchatche" - GIPSA-Lab

Transcription

Serveur de "tchatche" - GIPSA-Lab
Mini-projet systèmes & réseau
serveur de « tchatche »
On souhaite programmer un outil de « tchatche » (chat) sur le Web, qui permet à des
internautes de dialoguer sur le réseau avec d’autres utilisateurs. Il s’agit d’un programme
fonctionnant en client/serveur (1 seul serveur et de multiples clients). Chaque utilisateur est
identifié par un pseudo.
Spécifications externes
Le serveur doit fournir les fonctionnalités suivantes :
− Attente des connexions des utilisateurs ;
− Maintien de la liste des utilisateurs connectés ;
− Gestion des envois de messages d’un utilisateur vers une liste d’utilisateurs
(éventuellement tous les utilisateurs connectés)
Architecture logicielle
Le serveur est tenu de fonctionner de manière asynchrone. Il sera décomposé en trois types de
tâche :
− Une tâche d’attente des connexions (tâche classique d’un serveur) ;
− Une tâche de connexion validant le pseudo du nouvel utilisateur et créant la tâche
client associée (sauf si erreur) ;
− Une tâche client de gestion des communications pour chaque utilisateur connecté.
Clients (table des utilisateurs connectés)
Attente
Moniteur
Connexion
Client 2
Client 1
Réseau
Mini-projet systèmes & réseau serveur de « tchatche »
1/3
La tâche Attente attend les connexions des utilisateurs et dès qu’un utilisateur se connecte :
− Créé une tâche Connexion ;
− Se remet en attente.
La tâche Connexion vérifie que le pseudo fourni est valide (qu’il n ‘existe pas déjà) puis
− créé une tâche Client chargée d’attendre les messages de cet utilisateur ;
− met à jour les tables des utilisateurs ;
− informe les utilisateurs déjà connectés de l’arrivée du nouvel utilisateur.
Les tâches Client lisent les messages sur le réseau et appelle les méthodes de Clients afin de
distribuer les messages à tous les destinataires.
La table des utilisateurs connectés est partagée entre les différentes tâches, il est donc
important de s’assurer du bon déroulement des accès concurrents. Elle sera donc programmée
comme un moniteur.
Le protocole
Bien qu’on puisse très facilement échanger des objets en Java, il est souvent pratique de
définir un protocole basé sur des échanges de texte, car cela permet de tester les programmes
en utilisant un outil standard comme telnet. Les requêtes des clients et les réponses du
serveur se feront ainsi de la façon suivante :
Chaque requête sera constituée d’un mot-clé en majuscules, suivi éventuellement d’un ou
de plusieurs paramètres. La fin de la chaîne de caractères est matérialisée par la séquence
\r\n. Les paramètres éventuels seront séparés par un seul espace.
Les réponses du serveur seront des chaînes de caractères dont la fin est matérialisée par la
séquence \r\n.
La réponse à une connexion du client sur le port n est :
OK Jchat (version num_version) sur nom_machine démarré\r\n
Les points suivants devront être respectés dans l’implémentation de l’application :
− Le serveur doit avertir par un message les autres clients de l’arrivée d’un nouvel
utilisateur.
− Le serveur doit avertir par un message les autres clients du départ (déconnexion) d’un
utilisateur.
Connexion
À la connexion, le client envoie son nom d'utilisateur (pseudonyme) :
USER nom_utilisateur\r\n
Le serveur répond à l'utilisateur par un message de bienvenue :
OK nom_utilisateur\r\n
ou par un message d’erreur :
ERREUR nom_utilisateur déjà utilisé\r\n
En cas de succès, il informe les autres utilisateurs connectés de son arrivée :
CONNECT nom_utilisateur\r\n
Mini-projet systèmes & réseau serveur de « tchatche »
2/3
Session
Une fois la connexion réussie, l'utilisateur se trouve dans l'état session : il peut effectuer les
requêtes suivantes, jusqu'à la commande QUIT qui met fin à la session.
Envoyer le message message à une liste d’utilisateurs donnée ou à tous les utilisateurs
connectés (ALL)
MSGTO [util1 util2 … utilN] message\r\n
MSGTO [ALL] message\r\n
Pendant la session, le client doit également accepter des messages du serveur.
Information de la connexion d’un utilisateur (comme indiqué plus haut) :
CONNECT nom_utilisateur\r\n
Réception des messages d’un autre utilisateur :
MSGFROM [deQui] message\r\n
Déconnexion
La commande QUIT permet de se déconnecter du serveur de messagerie en direct.
QUIT\r\n
Le serveur informe par un message les autres utilisateurs de la déconnexion de
l'utilisateur :
DISCONNECT nom_utilisateur\r\n
Travail à réaliser
Écrire le serveur de tchatche. Vous testerez la bonne implémentation du protocole et le
fonctionnement de votre serveur en utilisant le client graphique chatClient.jar qui
vous est fourni dans N:\IHS\Reseaux.
Vous utiliserez dans un premier temps la classe Clients (moniteur de gestion des
utilisateurs connectés) qui vous sera fournie. Dans un second temps et si le calendrier le
permet, vous écrirez votre propre version du moniteur Clients.
Mini-projet systèmes & réseau serveur de « tchatche »
3/3