User Tools

Site Tools


rx:socket

This is an old revision of the document!


Programmation Socket

Dans ce TP, nous n'utiliserons pas les machines virtuelles. Durée : 4h.

Test des Sockets en C++

L'archive socket.tgz montre un exemple de client/serveur TCP/IP en C++ utilisant les sockets. Dans cet exemple, un client (client.cpp) reçoit le message “hello world” envoyé par le serveur (server.cpp) et l'affiche sur le terminal.

  • Récupérez l'archive, décompressez-la et compilez-là (make clean ; make).
  • Ouvrez deux terminaux et testez cet exemple :
$ ./server 8888
$ ./client localhost 8888    
  • Analysez les classes SocketServer et SocketClient définies dans les fichiers socket.cpp et socket.h.
  • A quoi sert la fonction work() dans ces classes ? Que représente l'argument fdw passé à cette fonction ?
  • A quoi servent les fonctions sendmsg() et recvmsg() ?
  • Modifiez le message envoyé par votre serveur et testez-le.
  • Connectez votre client au serveur de votre voisin ;-)
  • Détaillez grossièrement les étapes nécessaires au client et au serveur pour établir une connexion TCP/IP : socket, bind, listen, accept, connect…
  • A quoi sert la fonction pthread_create() côté serveur ?

Nota Bene : Il n'est pas nécessaire de comprendre le détail technique du fonctionnement des Sockets.

Serveur daytime

  1. En vous servant de l'exemple précédent, créez un serveur daytime qui affiche la date et l'heure courante dès qu'un client se connecte.
  2. Programmez un client pour ce service.
  3. Testez également votre programme avec la commande telnet.

Programmer son navigateur web (client HTTP)

Il s'agit maintenant de programmer un client HTTP minimaliste qui permet de demander une page web à un serveur web de votre choix (par exemple, www.emi.u-bordeaux.fr). Pour demander la page d'accueil (“/index.html” ou “/”) à un serveur, il suffit de lui envoyer la requête HTTP suivante “GET / HTTP/1.0\r\n\r\n”.

  • Programmez un tel client (dans un nouveau fichier get.cpp), qui envoie la requête GET et affiche sur son terminal la réponse HTTP du serveur.
  • Voici un petit extrait de code pour vous aider à afficher la réponse du serveur web :
int r;
char buffer[size];
while( (r= read(fd,buffer,size)) > 0)) write(fd,buffer,r);

IPv6

Faites en sorte que le programme get fonctionne en IPv6 :

  1. Fonctionnement en IPv6 seul : regardez du coté de AF_INET6, IN6ADDR_ANY_INIT, in6_addr, getaddrinfo, …
  2. Fonctionnement Mixte IPv4 et IPv6

Exercice Bonus

Documentation

Un peu de documentation concernant la programmation d'application réseau client/serveur en mode connecté (TCP/IP) avec les sockets :

rx/socket.1456826367.txt.gz · Last modified: 2024/03/18 15:05 (external edit)