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 -