• Aucun résultat trouvé

PR6 – Programmation réseaux TP no 2 : Clients TCP en C

N/A
N/A
Protected

Academic year: 2022

Partager "PR6 – Programmation réseaux TP no 2 : Clients TCP en C"

Copied!
2
0
0

Texte intégral

(1)

L3 Informatique Année 2020-2021

PR6 – Programmation réseaux TP n

o

2 : Clients TCP en C

En C, tout est bas-niveau, c’est-à-dire que contrairement à Java, beaucoup de choses sont à faire

« à la main ». Voici un rappel des principales fonctions C que nous utiliserons.

Les prototypes des fonctions supplémentaires nécessaires se trouvent dans les fichiers en-tête suivants :

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#include <arpa/inet.h>

Les fonctions principales sont :

int socket(int domaine, int type, int protocole);

int bind(int socket, const struct sockaddr *adresse, socklen_t longueur);

int listen(int socket, int attente);

int accept(int socket, struct sockaddr *adresse, socklen_t *longueur);

int connect(int socket, const struct sockaddr *adresse, socklen_t longueur);

int shutdown(int socket, int how);

int close(int socket);

ssize_t send(int socket,const void *tampon, size_t longueur,int options);

ssize_t recv(int socket,void *tampon, size_t longueur,int options);

int getaddrinfo(const char *hostname, const char *servname, const struct addrinfo *hints, struct addrinfo **res);

Exercice 1 : Déterminer le « boutisme » (endianness) d’une machine

Écrivez deux programmes en C disant si la machine qui les exécute est little-endian ou big- endian. Vous utiliserez deux techniques différentes, l’une utilisant la fonction htonl, et vous concluerez en disant si cette dernière fonction vous semble correcte.

1. En utilisant des entiers non signés sur 32 bits (de type (uint32_t)) et la fonction htonl, déterminez si votre machine est big-endian ou non.

2. Vérifiez maintenant comment sont encodés les entiers en mémoire sur votre machine. Pour cela vous pouvez convertir un entier codé sur 32 bits en tableaux de char, donc en tableaux de 4 octets, et ensuite afficher la valeur de chacun des octets du tableau (pour rappel printf avec %x permet d’afficher la valeur d’un octet donné).

Remarque : dans les 2 cas, utilisez comme témoin un entier dont les 4 octets sont différents. Cela est facile à écrire en notation hexadécimale, par exemple : uint32_t witness = 0x01020304;.

Exercice 2 : Un client TCP pour daytime en C

1. Déterminez l’adresse IPv4 de la machine lampe de l’ufr.

2. Sur lampe, le service daytime tourne. Écrivez un client qui se connecte à ce service, affiche la date et l’heure renvoyées par le service et se déconnecte. Vous utiliserez pour cette question l’adresse IPv4 de lampe.

3. Faîtes la même chose qu’à la question précédente mais en utilisant cette fois-ci le nom de la machine lampe et la fonction getaddrinfo.

1

(2)

L3 Informatique Année 2020-2021

Exercice 3 : Un client TCP pour echo en C

Dans cet exercice, faîtes un client qui se connecte au service echo de la machine lampe de l’ufr et qui en boucle lui envoie un message et affiche la réponse du service (par exemple le client enverra Hello1, Hello2, Hello3,. . .,Hello10 au service et attendra la réponse du service entre chaque envoi).

Exercice 4 : Faire un client echo à l’envers

Faites un client qui, une fois connecté à un service, fait en boucle 4 fois les actions suivantes : attendre un message (d’au plus 99 caractères) du serveur et lui renvoyer son message à l’envers.

Vous devrez tester ce client avec netcat (en mode serveur).

2

Références

Documents relatifs

Écrire un programme qui prend 3 arguments fic, alire, pivot sur la ligne de commande, vérifie que fic est composé uniquement de chiffres et si c’est le cas, stocke dans une chaîne

Ce message aura la forme suivante : adresse_ip port\n où adresse_ip est une chaînes de caractère représentant une adresse IP et port est une chaîne de caractères représentant

Pour cela le client demande la définition d’un mot au serveur et celui-ci lui renvoie le texte obtenu par l’appel à l’utilitaire dict (voir man dict sur son terminal).. Si dict

Dans chacun des trois exercices ci-dessous, il s’agit d’écrire un serveur qui reçoit une image sous une certaine forme, la transforme en niveaux de gris et la renvoie sous une

Écrire un programme, ServeurMajuscule, représentant un serveur TCP itératif renvoyant les chaînes de caractères envoyées par des clients après les avoir mis en majuscule.. Le

Pour cela, faire en sorte que le serveur détermine le nombre à choisir lorsque qu’un client se connecte et qu’il n’y a à ce moment là pas de client connecté.. Tout client qui

L’idée est la suivante : un client producteur envoie au serveur une chaîne de caractères qu’il aura reçu par l’entrée standard (le clavier), le serveur stocke alors cette

Le protocole est élémentaire, le client se contente d’envoyer un mot au serveur qui lui renvoit la réponse sous la forme d’un texte constitué d’un nombre quelconque de lignes