Mini-projet sur les Sockets
But du
projet :
-
Définir un petit protocole permettant de créer des
sémaphores, de se bloquer sur un sémaphore, de signaler un sémaphore et de
détruire un sémaphore.
-
Ecrire un serveur de sémaphores permettant de
synchroniser plusieurs applications.
-
Ecrire un ensemble de fonctions qui pourront être
utilisées pour dialoguer avec le serveur de sémaphores.
Le
serveur a écrire doit permettre de gérer des scénarios comme suit :
-
Une application (le client 1) crée un sémaphore d’identificateur
1 contenant au départ 1 jeton.
-
Le client 1 réalise une attente sur le sémaphore 1 (le
sémaphore 1 du serveur passe à 0 jeton).
-
Une autre application (le client 2) crée un sémaphore
d’identificateur 1. Le sémaphore étant déjà créé, un message d’erreur est
renvoyé par le serveur.
-
Le client 2 réalise une attente sur le sémaphore 1. Le
serveur bloque le client puisque le sémaphore ne contient plus de jetons.
-
Une autre application (le client 3) crée un sémaphore
d’identificateur 2 contenant au départ 1 jeton.
-
Le client 3 réalise une attente sur le sémaphore 1. Le
serveur bloque le client puisque le sémaphore ne contient plus de jetons.
-
Le client 1 signale le sémaphore 1. Le serveur réveille
le client 2.
-
Le client 2 signale le sémaphore 1. Le serveur réveille
le client 3.
-
Le client 3 signale le sémaphore 1 (le sémaphore 1 du
serveur passe à 1 jeton).
-
Le client 3 réalise une attente sur le sémaphore 2 (le
sémaphore 2 du serveur passe à 0 jeton).
-
Le client 1 réalise une attente sur le sémaphore 2. Le
serveur bloque le client puisque le sémaphore ne contient plus de jetons.
-
Le client 3 signale le sémaphore 3. Le serveur réveille
le client 1.
-
…
Comment
faire :
- Les clients et les serveurs vont dialoguer en échangeant des chaînes de caractères (un peu comme HTTP). Par exemple la chaîne : "WAIT 1\n" peut signifier que le client demande une attente et la chaîne "OK" peut être renvoyée par le serveur pour indiquer au client que le sémaphore ne bloque pas le client.
-
Pour bloquer les clients il suffit que ceux-ci attendent
après une attente la réponse du serveur. Si le serveur réponds, il n’y a pas
d’attente, s’il ne réponds pas tout de suite le client va attendre.
-
On pourra mettre en place une file d’attente pour chaque
sémaphore de façon à ce que les clients bloqués soient réveillés dans l’ordre
des demandes d’attente.
Important : Un
petit rapport présentant le protocole utilisé et la conception du serveur et
des fonctions clientes devra être rendu avec le code lors de la soutenance
(après les vacances de Pâques).