Exercice 0 - Familiarisation avec les sockets Unix
- Problème 0 : Utilisez
man
pour rechercher des informations sur:unix socket
(man 7 unix
)sockaddr
socket(2)
bind()
listen()
accept()
connect()
Pour les appels systeme: que prennent-ils comme entrée ? Que renvoient-ils en sortie ? De quelles bibliothèques C font-elles partie et quels en-têtes faut-il inclure pour les utiliser ?
Exercice 1 - Familiarisation avec les sockets.
-
Problème 0 : Étudiez les fichiers
example1Server.c
,example1Client.c
etexamplesHeader.h
:- Compilez les fichiers sources et lancez les exécutables correspondants.
- Ajouter aux fichiers source des commentaires décrivant l'action de chaque appel système.
-
Problème 1 : Étudiez les fichiers
example2Server.c
,example2Client.c
. Analysez-les comme indiqué ci-dessus.
Exercise 2
- Problème 0 : Sur la base des deux exemples précédents, écrivez un programme C
pour un scénario client-serveur dans lequel :
- Une connexion est établie entre le serveur et un client.
- Le client envoie un caractère latin minuscule au serveur via une socket.
- Le serveur imprime le caractère et répond au client (via la socket) avec la version majuscule du même caractère.
- Le client imprime le caractère qu'il a reçu et met fin à la connexion avant de quitter.
- Le serveur attend que le client suivant se connecte.
Décrivez en détail le schéma de communication inter-processus que vous avez mis en œuvre et défendez son exactitude.
Exercise 3
- Problème 0: Étendez le programme précédent de manière à ce que le serveur puisse gérer des connexions avec plusieurs clients en même temps. Pour ce faire, vous devez utiliser un mécanisme de concurrence (processus enfants, threads).
Devoir - à soumettre avant le 17/03/2024, 23:59 GMT+1
En utilisant les sockets Unix, créez un programme qui implémente un schéma serveur-client pour la gestion des fichiers, dans lequel un client peut demander au serveur n'importe quel sous-ensemble des opérations suivantes :
- La création d'un fichier, auquel cas il fournit également un nom de fichier.
- Lecture du contenu d'un fichier existant (à fournir via le socket).
- L'ajout (append) de données à un fichier déjà existant, auquel cas le client fournit également le nom du fichier et les données à écrire.
Le serveur doit pouvoir servir plusieurs clients en même temps.
Vous êtes libre de choisir la méthode que vous préférez pour mettre en œuvre la concurrence et les entrées/sorties de fichiers (parmi celles que nous avons vues).
Votre soumission doit inclure un exemple de client (en code, pas en exécutable) qui illustre les fonctionnalités que vous avez réussi à mettre en œuvre.