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

Documents pareils