TP: Socket TCP en C - cours
Transcription
TP: Socket TCP en C - cours
TP: Socket TCP en C But du TP Se familiariser avec l’API socket sous Windows. On s’intéresse au mode connecté TCP. Environement de tavail: Pour la programmation, utiliser l’environnement Codeblocks. Pour chaque partie du TP, créer un nouveau projet. Ne pas changer les les noms de variable données dans les codes à compéter. A la fin, n’oublier pas de sauvegarder votre travail dans votre espace personnel ou sur un support externe. Les squelettes du code sont téléchargeables à partir de l’adresse: nehsetl.free.fr Remarque: Les chargés de TP ne déboguent pas les erreurs de programmation. Vous devriez connaître les notions de base de la programmation en langage C. Partie I Dans cette partie, il s’agit de développer un serveur Echo. Le serveur reçoit un message du client et il le renvoit aussi tôt au client. On s’interesse dans ce TP au mode connecté, c’est-à-dire, au socket TCP (le mode non connecté UDP a été vu en Licence 3). L’exécution du client et du serveur se fera chacune sur une console cmd différente: lancer le serveur server port (exemple: server 5000) lancer le client client @IP_serveur port (exemple: client 127.0.0.1 5000) Puisque l’@IP et le numéro de port sont désignés en ligne de commande, vous deviez savoir comment récupérer des argument dans un programme en C! Travail à faire: 1. Remplir les deux squelettes client.c et server.c (créer un projet pour chaque squelette). 2. Exécuter le serveur en premier ensuite, le client. Faire un essai en local, puis avec vos collègues. 3. Essayer de connecter un deuxième client, que se passe-t-il? 4. Quel est le rôle des bibliothèques suivantes: stdlib.h, type.h, winsowk2.h et ws2tcpip.h. 5. Quel est le rôle des deux premières lignes du code: WSADATA et WSAStartup? Partie II Dans la première partie, un serveur itératif a été développé. Itératif ? c’est-à-dire, un seul client est servi à la fois. Et pour servir plusieurs clients? Deux solutions: • concurrence: consiste à créer un nouveau processus pour servir chaque demande de connexion. Dans ce cas, un processus principal attend au niveau de la fonction accept. Lorsqu’il reçoit une demande de connexion, il crée un processus fils qui va interagir avec le client. Le processus principal se met de nouveau en attente au niveau de la fonction accept. Cette méthode est aussi appelée fork et exec (vous en savez quelques chose cette année dans le cours programmation système). 1 • multiplexage: en utilisant la fonction select. C’est la solution qui nous intérèsse. Travail à faire: 1. faire une recherche bibliographique sur la méthode select. 2. Compléter le squelette serverSelect.c. 3. Pour le test, vous aurez besoin de trois consoles cmd, une pour lancer le serveur, une pour lancer un client et une dernière pour lancer un autre client par exemple telnet. 4. Expliquer et commenter le code. lancer le serveur server port (exemple: server 5000) lancer le client 1 client @IP_serveur port (exemple: client 127.0.0.1 5000) lancer le client 2 client @IP_serveur port (exemple: client 127.0.0.1 5000) Partie III Modifier le code développé dans la section précédente pour faire un serveur Echo multi-clients. 2