Programmation d`un salon de discussion

Transcription

Programmation d`un salon de discussion
Master M1 (SI / MADOCS)
2006 – 2007
Projet de programmation réseaux
T-T. Dang Ngoc ([email protected])
Département des Sciences Informatiques
Programmation d’un salon de discussion
Il s’agit de programmer un « salon de discussion ». Ce salon est composé d’un serveur auquel accède plusieurs
clients.
Serveur
Le serveur permet de centraliser et de rediffuser à tous ses clients chaque message qui lui est envoyé. L’identité
de l’interlocuteur devra précéder chaque message lors de la diffusion des messages.
Le serveur devra prendre en compte les clients se connectant en cours de discussion et ceux quittant la
conversation.
Un historique des sessions clientes sera conservé.
Client
Un programme client permet de contacter le serveur et d’accéder au salon pour discuter avec les autres
clients.
Un certain nombre de fonctionnalité permet d’interagir avec le serveur. Ces fonctionnalités feront l’objet
d’un protocole applicatif que vous aurez à spécifier.
Protocole applicatif
Votre protocole applicatif devra obligatoirement permettre les fonctionnalités suivantes :
– Établissement de la connexion au niveau applicatif : annonce de la version et du protocole par le serveur
– Identification du client : protocole simple par login (éventuellement mot de passe stocké dans un fichier)
– Fermeture de connexion : annonce à l’initiative du serveur (en cas de problème ou d’arrêt de l’administrateur par exemple) ou plus généralement à l’initiative du client. Un client ne répondant pas au bout
d’un certain temps d’inactivité doit être considéré comme déconnecté.
– Permettre aux clients de s’échanger des messages : chaque message envoyé par un client est rediffusé à
tous les clients. Le message sera précédé du nom de l’auteur du message.
Il serait conseillé de permettre également quelques unes des fonctionnalités suivantes :
– Envoi de messages privés : c’est-à-dire un message d’un client adressé spécifiquement à un seul autre
client
– Gestion de plusieurs salons de discussion : c’est-à-dire qu’il y a plusieurs salons de discussions désignés
par des noms et que les clients choisissent de rejoindre
– Transfert de fichiers : un client peut permettre aux autres clients de télécharger un fichier qu’il met à
leur disposition.
– Gestion sur le serveur : voir la liste des clients connectés, récupération de l’historique, passage en mode
administrateur, arrêt du serveur, etc.
1
– Interprêtation de mots-clefs : : emoticons (smiley), couleurs de texte, etc.
Exemple de session cliente (le protocole est arbitraire, vous pouvez définir votre propre protocole et gestion
de l’affichage). Ce qu’écrit le client concerné est mis en gras
$ ./client machine.truc.com
Bienvenue sur Serveur machine.truc.com (192.168.42.54) version 4.2.
> USER dntt
pseudo ’dntt’ OK
> join #blahblah
salon #blahblah rejoint. Actuellement 2 utilisateurs connectés (toto, zorglub)
zorglub : et tu sais quoi l’autre jour j’ai nettoyé mon clavier
toto : tiens, dntt, bonjour dntt !
> Salut ! tout le monde
zorglub : salut dntt
zorglub : je racontais que j’ai trouvé des fourmis dans mon clavier
toto : non ?!
> des vraies qui bougent ?
zorglub : oui, a force de faire tomber des miettes entre les touches, ben
* mimi a rejoint le salon
zorglub : il y avait tout un écosystème qui s’était mis en place entre les touches
mimi : ’lut ! de quoi vous parlez ?
toto : bon, moi je vais me coucher, bye !
* toto a quitté le salon
zorglub : bon, ca ne vous intéresse pas ce que je raconte
> Non :-)
> /USERS
Liste des utilisateurs connectés : dntt, mimi, zorglub
zorglub : bon, je boude
> /QUIT
Vous avez quitté le salon. Au revoir
$
Afin de pouvoir réaliser ce projet (à rendre avec un petit rapport décrivant le protocole), les étapes suivantes
seront suivies en TP :
Programmation du serveur :
1. Créez un serveur TCP acceptant les connexions et affichant la provenance du client qui s’est connecté.
2. Testez le serveur à l’aide de la commande telnet.
3. Récupérez sur le serveur les messages envoyé par le client et renvoyez-les précédés de la provenance du
client.
4. Gérez les connexions multiples.
5. Récupérez sur le serveur les messages envoyé par un client quelconque et renvoyez-les à chacun des
clients précédés de la provenance du client. Modifiez ensuite votre code pour l’envoyer à tous les clients
sauf l’expéditeur du message.
6. Gérez la commande cliente demandant à quitter le serveur.
7. Gérez la terminaison des connexions inactives depuis un certain temps.
Programmation du client :
1. Programmez un client se connectant au serveur défini par l’utilisateur
2. Envoyez une chaine quelconque (codée en dur tout d’abord) au serveur. Récupérez et affichez à l’écran sa
réponse.
3. L’utilisateur interagit avec le programme client en tapant sur l’entrée standard. Les messages sont ensuite
envoyés au serveur. Tout ce qui provient du serveur est affiché à l’écran.
Finalisation
1. Gérez l’identification
2. Gérez les différentes commandes
3. Réalisez éventuellement une petite interface graphique pour le client.
2