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).