PROJET POSIX – APPLICATION DE "CHAT"

Transcription

PROJET POSIX – APPLICATION DE "CHAT"
PROJET POSIX – Chat
PROJET POSIX – APPLICATION DE "CHAT"
L’objectif de ce projet est de programmer une application de “chat” (à la fois le serveur et le
client) en utilisant l’interface de programmation POSIX.
Un programme serveur multi-threadé qui communique en mode connecté centralise les
échanges, et récupère les demandes de connexion des clients sur une socket dédiée (port
9900). Un message tapé dans la fenêtre d'un client est transmis au serveur sous forme de
requête à chaque retour chariot. Une requête contient l'identifiant du client (un pseudonyme
arbitrairement choisi par le client) ainsi que le contenu de son message. Le type d'une
requête est le suivant :
typedef struct req {
char pseudo[24];
char msg[1000];
} chat_request;
Au lancement, le client demande automatiquement sa connexion au serveur par une requête
dont le contenu est "JOIN". Lors de sa fermeture, et ce même s'il est interrompu par un
signal, le client annonce explicitement sa déconnexion du serveur au moment de quitter par
une requête "QUIT". Ces requêtes spécifiques amènent le serveur à rajouter ("JOIN") ou à
supprimer ("QUIT") le client dans une liste des participants, puis à envoyer un message au
client pour lui signifier le traitement de sa requête. Un client ne peut réellement
débuter/clore sa session de chat qu'après avoir reçu un acquittement du serveur.
Toutes les autres requêtes client seront considérées comme des requêtes messages et seront
retransmises aux autres clients participant à l'application. Entre ces deux opérations, le
client poursuit deux activités concurrentes : il transmet au serveur les messages entrés sur
le terminal par l'utilisateur, et il affiche dans le terminal les messages envoyés par le serveur.
A chaque réception de requête message, le serveur insère celle-ci dans une file. En
parallèle, le serveur extrait un à un les messages de sa file et les diffuse à l'ensemble de
ses clients.
Il vous est demandé de fournir un délivrable répondant à ce cahier des charges. En
particulier, vous rédigerez un document au format PDF, accompagné d'une version papier,
détaillant l'architecture de l'application :

Rôle de chaque processus/thread au sein du programme client et du programme
serveur

Mécanismes de communication (sockets, mémoire partagée, ...)

Mécanismes de synchronisation (signaux, sémaphores, ...)
Ce document s'attachera à décrire le fonctionnement de chacun de ces composants ainsi que
les valeurs initiales des variables et sémaphores. Il contiendra également un mini-manuel de
l'utilisateur expliquant comment utiliser votre application.
- 1 -