Loading s7crs_l06_tcp_socket...
{1} du programme fourni, vous allez créer une
socket d'écoute TCP qui sera associée à ce numéro de port.{2} du programme fourni, vous fermerez la
socket d'écoute lorsqu'elle ne sera plus utile (à la fin du
programme).{3} du programme fourni).{4} du programme fourni, vous fermerez la
socket de dialogue TCP lorsqu'elle ne sera plus utile (à la fin du
dialogue avec le client).
Le début de la boucle de dialogue consiste à attendre que le client nous
envoie un message par la connexion TCP.{5} du programme fourni, votre programme se met
en attente d'un tel message.{6} du programme fourni afin de renvoyer une
réponse (textuelle à nouveau ici) au client auquel nous sommes reliés
par la socket de dialogue TCP.
Pour tester ce programme, nous le lançons tout d'abord dans un terminal :
$ ./prog01_txt_mono_tcp_server 9876 ↵
host 'menthe23.enib.fr' waiting for a new connection on port '9876'...
Notre programme nous rappelle le nom de notre de machine ainsi que le port
que nous avons choisi arbitrairement sur sa ligne de commande (>1024).
Dans un autre terminal, nous pouvons utiliser cette commande✍{1} du programme fourni, vous devez obtenir
l'adresse IP du serveur choisi en ligne de commande.{2} du programme fourni, vous allez créer une
socket TCP qui sera connectée au serveur.
Dès qu'on accède à des ressources du système (ici la socket), il
convient de se poser la question de la libération de ces ressources.{3} du programme fourni, vous fermerez la
socket lorsqu'elle ne sera plus utile (à la fin du programme).
La partie active du programme est une boucle dans laquelle s'enchaînent
requêtes et réponses.{4} du programme fourni, votre programme va
envoyer sa requête au serveur via la connexion TCP.{5} du programme fourni afin de
se placer en attente de la réponse produite par le serveur sur cette même
connexion TCP.{1}, {2} et {3} du programme
fourni, il suffit de reprendre exactement ce qui avait été réalisé dans la
version précédente du serveur TCP.
Il s'agit en effet de la création de la socket d'écoute TCP, de sa
fermeture en fin de programme et de la boucle d'acceptation des nouvelles
connexions qui, comme expliqué plus haut, restent inchangées.
En complétant le point {4} du programme fourni, nous créons un
thread détaché qui exécutera la fonction dialogThread() (définie
plus haut dans le code) à laquelle nous passons en paramètre la socket
de dialogue TCP obtenue juste avant lors de l'acceptation d'une nouvelle
connexion.
Puisque c'est la fonction dialogThread() qui se chargera de
l'exploitation de la socket de dialogue, nous nous empressons (comme à
notre habitude désormais) d'envisager immédiatement sa fermeture.{5}, à la fin de cette fonction.
Remarquez la construction try/catch qui précède cette étape de
fermeture et qui englobe toute la partie active du dialogue : il s'agit
du mécanisme d'interception des exceptions (anomalies d'exécutions).{6}) et l'envoi d'une réponse (point {7})
exactement comme nous l'avions fait dans la version précédente de notre
serveur TCP.
En l'état, vous pouvez reprendre toutes les phases de test de l'étape
précédente.{1}),
sa fermeture (point {2}), l'acceptation des nouvelles connexions
(point {3}), le démarrage du thread de dialogue (point {4})
et la fermeture de la socket de dialogue (point {5}) sont
strictement identiques à la version textuelle.{6}, {7}, {8} et {9} de ce
programme, vous devez réaliser toutes les opérations de réception,
conversion d'ordre, et envoi nécessaires à l'échange des informations
numériques (recevoir un entier de 32 bits et renvoyer son double et
son carré).
De la même façon, le code source du programme prog05_bin_tcp_client.cpp
doit être complété en s'inspirant largement de ce qui a déjà été fait dans
prog02_txt_tcp_client.cpp ; il s'agit en effet d'un client TCP.{1}),
la création de la connexion TCP (point {2}) et sa fermeture (point
{3}) sont strictement identiques à la version textuelle.{4}, {5}, {6} et {7} de ce
programme, vous devez réaliser toutes les opérations de conversion d'ordre,
envoi et réception nécessaires à l'échange des informations numériques
(envoyer un entier de 32 bits et en recevoir deux en réponse).
Désormais, ces deux nouveaux programmes serveur et client TCP doivent pouvoir
échanger leurs informations binaires ; testez leur fonctionnement, aussi
bien en local qu'à distance depuis plusieurs machines.{1} et {2}) et leur fermeture (point {3}) sont quasiment
identiques aux serveurs TCP précédents (aux noms de variables près).{4}).
À la sortie de cet appel bloquant, le vecteur transmis a été modifié et ne
contient plus que les sockets d'écoutes qui sont prêtes à accepter de
nouvelles connexions sans attendre.{5} et {6}) si elle est toujours dans ce vecteur ;
si c'est le cas, après acceptation de la connexion TCP, il suffit de lancer
un thread qui exécutera le dialogue textuel ou binaire dans l'une ou
l'autre des fonctions dédiées (points {7} et {8}).
Vérifiez le bon fonctionnement de ce nouveau serveur en le sollicitant par
de multiples clients textuels et binaires.