Programmation TCP - Select
1 Introduction
Le but du TP est de faire un serveur qui gère plusieurs clients et qui leur permet de dialoguer: lorsqu’un client envoie un message au serveur, il est relayé aux autres clients.
La difficulté est dans l’utilisation correcte de la commande select.
Pendant le TP il est donc conseillé de regarder:
2 Découverte 1
Récupérez l’archive TP5.zip sur arche et décompressez-là.
Lancer le serveur sur une machine avec la commande
python3 server.py 1664- Connectez-vous par ssh sur DEUX autres machines et lancez
python3 client.py ip_du_serveur 1664(il faudra copier client.py et aussi utils.py )
- Comprenez ce qui se passe
3 Découverte 2
Le fichier utils.py contient deux fonctions: l’une qui prend une socket, un code (un entier 32 bits) et un message, et qui envoie le message; L’autre qui prend une socket, et qui renvoie un code et un message.
- Familiarisez-vous avec les deux codes.
4 Modification 1
Modifiez le serveur pour qu’il puisse accepter autant de clients que possible, et qu’il se comporte bien si un client part/arrive. On pourra regarder le cours, et en particulier les dernières slides sur les sockets.
Testez avec 4 clients.
5 Modifications 2 - Logiciel de chat
- Refaites complètement le client pour qu’il puisse (a) recevoir un message du serveur ou (b) lire un message tapé par l’utilisateur ou l’utilisatrice et l’envoyer au serveur. Conjointement, le serveur devra relayer les messages qu’il reçoit d’un client vers tous les autres clients. On pourra regarder les derniers slides sur les sockets pour savoir ce que doit faire le client
6 Modifications 3
- Modifier client et serveur pour que le client, au moment où il se connecte, déclare son nom. Le serveur devra vérifier que le nom n’est pas déjà utilisé par un autre client. Lorsque le serveur enverra un message du client vers les autres clients, il indiquera en particulier le nom du client.
7 Modifications 4
Modifier client et serveur pour avoir plusieurs canaux de discussions. Plus précisément:
- Le client doit pouvoir indiquer au serveur, à tout moment:
- qu’il souhaite joindre un canal de discussion (si le canal n’existe pas, on le crée)
- qu’il souhaite quitter un canal de discussion
- Lorsque le client veut parler, il doit indiquer, d’une manière ou d’une autre, sur quel canal il veut parler
- Lorsque le client reçoit un message, il doit savoir sur quel canal ce message est arrivé
Pensez en particulier à tous les messages d’erreur différents que le serveur peut envoyer au client (Par exemple: si le client essaie de parler sur un canal qu’il n’a pas joint).