User Tools

Site Tools


rx:socket

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
rx:socket [2016/03/01 09:33] – created orelrx:socket [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 1: Line 1:
-==== Programmation Socket====+====== Programmation Socket======
  
 Dans ce TP, nous n'utiliserons pas les machines virtuelles. Durée : 4h. Dans ce TP, nous n'utiliserons pas les machines virtuelles. Durée : 4h.
  
-==Test des Sockets en C++ ==+====Test des Sockets en C++ ====
  
 L'archive {{:rx: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.  L'archive {{:rx: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. 
Line 24: Line 24:
  
  
-== Serveur daytime ==+==== Serveur daytime ====
  
   - 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.   - 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.
Line 30: Line 30:
   - Testez également votre programme avec la commande //telnet//.   - Testez également votre programme avec la commande //telnet//.
  
-== Programmer son navigateur web (client HTTP)==+==== 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"'' 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"''
Line 42: Line 42:
 </code> </code>
  
-== IPv6 ==+==== IPv6 ====
  
 Faites en sorte que le programme ''get'' fonctionne en IPv6 : Faites en sorte que le programme ''get'' fonctionne en IPv6 :
Line 49: Line 49:
  
  
-== Exercice Bonus ==+==== Exercice Bonus ====
  
-[[ rx:exo-bonus | ici ]]+== Deux clients discutant via un serveur central ==
  
-==Documentation==+Afin de préparer notre petit projet, nous allons programmer une petite application réseau mettant en jeu deux clients connectés simultanément à un serveur central. Lorsque plusieurs clients se connectent à notre serveur (//SocketServer//), la fonction //work()// s'exécute simultanément (côté serveur) pour traiter chaque connexion cliente grâce à un thread. Il est possible de distinguer nos deux clients grâce à la valeur du // file descriptor// (fdw) qui est différente pour chaque connexion cliente. Le scénario est le suivant. Le serveur attend la connexion des deux clients en utilisant la fonction //barrier()// de la classe //SocketServer// avant de commençer à dialoguer. Les deux clients s'échangent un message en passant par le serveur central. Puis chaque client affiche le message reçu dans son terminal. Par exemple, le premier client envoie "coucou1" au second et le second envoie "coucou2" au premier. 
 + 
 +Par exemple, dans trois terminaux : 
 +<code bash> 
 +$ ./server 8888 
 +$ ./client localhost 8888 coucou1    # premier client envoyant "coucou1" et recevant "coucou2" 
 +  coucou2 
 +$ ./client localhost 8888 coucou2    # second client envoyant "coucou2" et recevant "coucou1" 
 +  coucou1 
 +</code> 
 + 
 +__Nota Bene__ : Il n'est pas nécessaire de modifier les classes //Socket//. Il suffit d'adapter les classes //SocketClientTest// et //SocketServerTest//.  
 + 
 +   
 +==Correction== 
 + 
 +Voici une correction pour cet exercice : {{:rx:socketexo.tgz | ici}} . Notez l'utilisation de la fonction //barrier()// côté serveur pour synchroniser les deux clients au début et à la fin de la connexion : c'est important !  
 + 
 +FIXME : cette correction devrait être améliorer en utilisant les fonctions //sendmsg()// et //rcvmsg()//
 + 
 +====Documentation====
  
 Un peu de documentation concernant la programmation d'application réseau client/serveur en mode connecté (TCP/IP) avec les sockets : Un peu de documentation concernant la programmation d'application réseau client/serveur en mode connecté (TCP/IP) avec les sockets :
rx/socket.1456824815.txt.gz · Last modified: 2024/03/18 15:05 (external edit)