Programmation TCP

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

On fait la même chose que la dernière fois, mais en TCP.

3 Découverte

  • Récupérez l’archive TP4.zip sur arche et décompressez-là.

  • Compilez le .c et lancez-le sur votre machine

  • Depuis un autre terminal, lancez la commande

python3 client.py 127.0.0.1 1234
  • Modifiez le programme pour gérer les erreurs (afficher l’erreur et quitter le programme)

4 Serveur

  • Ecrire un serveur server.py compatible avec votre client. Le serveur doit afficher l’IP et le port du client.

  • Lancez server.py sur votre pc et client.py sur un autre PC. Vérifiez que tout fonctionne.

  • Modifiez le serveur pour qu’il mette le message du client en majuscule.

PREMIER RENDU: Les deux fichiers client.py, server.py et une capture wireshark montrant le client et le serveur qui communiquent.

5 Modifications

  • Recopiez les fichiers server.py et client.py dans deux nouveaux fichiers server2.py et client2.py. Modifiez ces nouveaux fichiers, de sorte que le client envoie deux entiers au serveur, qui va renvoyer la somme. Le client enverra un seul message, dont les 4 premiers octets correspondront au premier entier, et les 4 octets suivant au deuxième entier. Les deux entiers sont à demander au client (syntaxe: x=int(input("donner un entier")))

DEUXIEME RENDU: Les deux fichiers client2.py, server2.py

6 Modifications 2

  • Recopier les fichiers server2.py et client2.py dans deux nouveaux fichiers server3.py et client3.py. Modifiez ces nouveaux fichiers, de sorte que le client envoie les deux entiers au serveur en deux send (un entier par send), et que le serveur fasse deux recv (un par entier).

IMPORTANT: Ecrire votre code de façon à ce que les deux send de la part du client soient sur deux lignes consécutives du programme(faire d’abord les deux input, et ensuite les deux send)

TROISIEME RENDU: Les deux fichiers client3.py, server3.py

7 Modifications 3

  • Est-ce que client3.py est compatible avec server2.py ? Justifier. (Attention: ce n’est pas parce que tout a fonctionné correctement quand vous lancez l’expérience que les programmes sont compatibles. Vous avez peut-être eu de la chance).

  • Est-ce que client2.py est compatible avec server3.py ? Justifier.

  • Recopier le fichier server2.py dans un fichier newserver2.py. La question suivante est à faire dans le nouveau fichier.

  • L’instruction recv(n) signifie “recevoir au maximum n octets”. Ecrire une fonction really_recv(s, n) qui prend en argument une socket et un entier n et qui renvoie exactement les n premiers octets reçus sur la socket. A l’intérieur de la fanction really_recv, il faudra donc lancer plusieurs fois la fonction recv() jusqu’à avoir reçu très exactement n octets. Vous pouvez ajouter des arguments à la fonction si vous le souhaitez.

  • Utilisez cette nouvelle fonction dans newserver2.py pour remplacer recv.

  • Est-ce que client3.py est compatible avec newserver2.py ? Justifier

TROISIEME RENDU: Le nouveau fichier newserver2.py et la réponse aux questions dans un fichier README