Projet 2017-18 : chat distribué

Description générale

Dans ce projet, il s'agira d'implémenter un outil de discussions instantanées.

Lorsqu'un client se lance, il demande le pseudo de son utilisateur. Quand quelqu'un tape un message, tous les utilisateurs connectés recoivent le message avec l'affichage du pseudo de celui qui l'a envoyé.

Quand un nouvel utilisateur arrive ou quitte la discussion, les autres utilisateurs en sont informés par un message sur leur console.

Au niveau du serveur qui gère la liste des utilisateurs présents, il sera possible de bannir un utilisateur qui ne pourra alors plus envoyer de messages.

Contraintes techniques

Le serveur sera implémenté en C et les clients auront une double implémentation, en C et en Java en fonctionnant de la même manière.

Chaque client communiquera avec les autres clients avec des sockets TCP. L'envoi d'un message par son utilisateur se fera par des envois point à point en TCP à chacun des autres clients.

Un groupe UDP multicast sera utilisé par un client pour prendre contact avec le serveur et prévenir de sa présence quand il se lance ou de son départ.

Quand le serveur détecte l'arrivée ou le départ d'un client, il envoie sur le groupe multicast la liste mise à jour des adresses des sockets TCP de tous les clients présents.

Une attention particulière sera apportée à la gestion des crashs de clients et du serveur.