• Aucun résultat trouvé

PR6 – Programmation réseaux TP no 8 : Processus légers et verrous en C

N/A
N/A
Protected

Academic year: 2022

Partager "PR6 – Programmation réseaux TP no 8 : Processus légers et verrous en C"

Copied!
2
0
0

Texte intégral

(1)

L3 Informatique Année 2016-2017

PR6 – Programmation réseaux

TP n

o

8 : Processus légers et verrous en C

Exercice : Un client et un serveur pour un service de tuteurs

On souhaite programmer un serveur et un client afin de gérer un ensemble de tuteurs disponibles pour aider des étudiants ; ceux-ci peuvent se connecter via une application auprès d’un serveur qui leur permet de demander l’allocation d’un tuteur et de converser avec lui.

Dans la suite, un «message» est une «ligne» de caractères (donc terminée par un ’\n’ ! ! !).

Serveur Le serveur attend les messages des clients sur son port. Il maintient à jour une liste chaînée de tuteurs disponibles, où un tuteur est représenté par son nom (appelé id ) et sa discipline. Les messages peuvent être :

- LIST signifie que le client demande la liste des sujets pour lesquels un tuteur est disponible (il peut y avoir plusieurs tuteurs de même champ de compétence). Le serveur renvoie donc au client cette liste. Pour ce faire, il commence par envoyer au client un premier message contenant juste le nombre n (en ASCII) d’éléments de la liste. Il envoie ensuite n messages du type : <subj> (discipline).

- ACQUIRE <subj> signifie que le client demande un tuteur de la discipline subj . S’il y a un tuteur de cette discipline disponible, le serveur renvoie au client l’identifiant de ce tuteur et le retire de la liste des tuteurs disponibles. Sinon le serveur renvoie le message d’erreur ERROR .

- QUESTION <text> signifie que le client pose une question au tuteur qui lui a été attri- bué, auquel cas, le serveur répond toujours par le message ANSWER lis ton cours ou n’importe quel message de type ANSWER <message>. Ce message ne peut être envoyée que si l’acquisition d’un tuteur a été correctement réalisée auparavant, sinon le serveur renvoie ERROR.

- RELEASE <id> signifie que le client rend disponible le tuteur d’identifiant id. Le ser- veur rend ce tuteur à nouveau disponible. Et les deux parties ferment la connexion.

Ce message ne peut être envoyée que si l’acquisition d’un tuteur a été correctement réalisée auparavant, sinon le serveur renvoie ERROR.

Client Le client se connecte au serveur et lui envoie des requêtes. Il interagit avec l’utilisateur via un terminal. Sur ce terminal, un prompt (TuteurOnLine> ) invite l’utilisateur à entrer sa nouvelle requête tant que celui-ci ne demande pas à se déconnecter et le client y affiche les réponses. Depuis le prompt, l’utilisateur peut taper :

- l, alors le client affiche les disciplines actuellement disponibles ;

- tuteur <subj> , alors s’il y a un tuteur affecté le client affiche l’identifiant ; sinon il affiche un message d’erreur ;

- ? <text> pour poser une question,

- fin, alors le client affiche le message Merci! et termine proprement la connexion avec le serveur ;

Une conversation pourrait être :

$ ./client adresse_serveur port_serveur tuteurOnLine> l

prog_java

1

(2)

L3 Informatique Année 2016-2017

proba prog_c prog_reseaux

tuteurOnLine> tuteur proba Ok, connecté avec Rachid

tuteurOnLine> ? quel est la probabilité de gagner au loto Rachid: lis ton cours

tuteurOnLine> ? combien font 1 + 1 Rachid: lis ton cours

tuteurOnLine> fin Ok, fin de session

$

1. Programmez le client et un premier prototype mono-filaire du serveur : présumez qu’au plus un client à la fois est connecté.

2. Modifiez le serveur pour gérer plusieurs clients en parallèle en utilisant des processus légers.

Garantissez la cohérence en vous servant du mécanisme de verrouillage (mutex ). Par exemple, deux clients peuvent demander simultanément de modifier la liste des tuteurs disponibles. Par ailleurs, la liste peut être mise à jour entre le moment où sa taille est envoyée au client et le moment où elle est transmise. Pour cela, vous commencerez par effectuer une copie de la liste (la section critique du code), puis vous enverrez au client le nombre d’éléments de la liste copiée, ainsi que la liste copiée.

(3) Pouvez-vous permettre des accès concurrents à la liste en restreignant le verrouillage à un nombre modeste d’éléments ?

2

Références

Documents relatifs

Écrire un programme qui prend 3 arguments fic, alire, pivot sur la ligne de commande, vérifie que fic est composé uniquement de chiffres et si c’est le cas, stocke dans une chaîne

Ce message aura la forme suivante : adresse_ip port\n où adresse_ip est une chaînes de caractère représentant une adresse IP et port est une chaîne de caractères représentant

Pour cela le client demande la définition d’un mot au serveur et celui-ci lui renvoie le texte obtenu par l’appel à l’utilitaire dict (voir man dict sur son terminal).. Si dict

S’il y a un tuteur de cette discipline disponible, le serveur renvoie au client l’identifiant de ce tuteur et le retire de la liste des tuteurs disponibles.. Sinon le serveur renvoie

Dans chacun des trois exercices ci-dessous, il s’agit d’écrire un serveur qui reçoit une image sous une certaine forme, la transforme en niveaux de gris et la renvoie sous une

Pour cela, faire en sorte que le serveur détermine le nombre à choisir lorsque qu’un client se connecte et qu’il n’y a à ce moment là pas de client connecté.. Tout client qui

L’idée est la suivante : un client producteur envoie au serveur une chaîne de caractères qu’il aura reçu par l’entrée standard (le clavier), le serveur stocke alors cette

Le protocole est élémentaire, le client se contente d’envoyer un mot au serveur qui lui renvoit la réponse sous la forme d’un texte constitué d’un nombre quelconque de lignes