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.