TP4

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

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

  • Le client envoie-t-il les entiers en un message ou deux messages ? Justifier. (En TCP, ce n'est pas parce qu'il y a deux send que les entiers sont envoyés en deux messages)

    TROISIEME RENDU: Les deux fichiers client3.py, server3.py. Indiquez clairement dans le client la réponse à la question

7. Modifications 3

  • Est-ce que client3 est compatible avec server2 ? Justifier

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

  • L'instruction recv(n) signifie "recevoir au maximum n octets". Ecrire une fonction really_recv(n) qui reçoit exactement n octets (aide: lancer l'instruction recv(), et si elle renvoie moins que n octets, relancez-là autant de fois que nécessaire) Utilisez cette nouvelle fonction dans server2.

  • Est-ce que client3 est compatible avec server2 ? Justifier

    TROISIEME RENDU: Le nouveau fichier server2.py et la réponse aux questions