Programmation TCP - Select

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

2 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:

3 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 une autre machine et lancez
python3 client.py ip_du_serveur 1664
  • Comprenez ce qui se passe

4 Découverte 2

  • Lancer le serveur server2.py et 2 clients (sur trois machines différentes en tout)

  • Comprenez ce qui se passe

5 Modification 1

On rappelle les informations suivantes: si on met dans la liste des sockets à écouter par select la socket d’écoute du serveur (celle qui s’appelle mysocket) alors on sera averti si un nouveau client arrive. Dans ce cas la socket mysocket fera partie des sockets renvoyées dans la liste read.

  • Modifiez le serveur pour qu’il puisse accepter autant de clients que possible, et qu’il se comporte bien si un client part/arrive.

  • Testez avec 4 clients.

6 Modifications 2 - Logiciel de chat

Sous linux, si la liste des sockets à écouter par select contient sys.stdin, alors on sera averti quand l’utilisateur ou l’utilisatrice écrit un message sur le clavier. Dans ce cas le descripteur de fichier sys.stdin (même si ce n’est pas une socket) fera partie des sockets renvoyées dans la liste read. On peut alors récuperer le message avec sys.stdin.readline().

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

  • Modifier le serveur pour que, si jamais le client écrit le message “FIN”, alors le client se déconnecte du serveur.