Programmation TCP - Select

Prélude

Vous devez rendre tout ce que vous avez obtenu pendant le TP, sur arche

Vous pouvez le finir chez vous, ou le rendre à la fin du TP.

Il ne faut pas rendre les serveurs et clients intermédiaires, juste les versions finales (dont le fichier utils.py).

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:

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 machine et lancez
python3 client.py ip_du_serveur 1664

(il faudra copier client.py et aussi utils.py )

  • Comprenez ce qui se passe

Modification 1

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.

  • Modifiez les deux codes pour utiliser les fonctions really_recv et really_send du TP précédent. Vérifiez que tout fonctionne correctement.

Modification 2

  • 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.

Modifications 3 - 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

Modifications 4

  • 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.

RENDU: Les clients, et serveurs, et un fichier README.md qui explique le protocole utilisé (le choix des différents codes)

Modifications 5

  • Modifier client et serveur pour que le client puisse envoyer le message, grâce au serveur, à un autre client particulier (et non pas à tous les clients). Si jamais vous n’arrivez pas à faire cette étape, expliquer dans le fichier README.md:

    • Le protocole utilisé
    • Ce qu’il faudrait modifier dans le serveur et le client pour que tout fonctionne

RENDU: Les clients, et serveurs, et un fichier README.md qui explique le protocole utilisé (le choix des différents codes)