TP 5

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 1

Faculté des Sciences de Bizerte A.

U 2021/2022
Section GLSI3 1er novembre 2021

Développement d’applications réparties


Travaux pratiques N° 5 : Compléments sur la programmation C/S et les
Sockets

Exercice 1 Application de Chat Multicast


Écrire le code d’une application Java qui permet de simuler la discussion entre un groupe
d’utilisateurs. Chaque processus joue le role d’émetteur et de receveur.
1. Créer un thread qui se met à l’écoute de la ligne de commandes, chaque ligne saisie par
l’utilisateur doit etre envoyée à tous les membres du groupe multicast.
2. Créer un thread à l’écoute des messages envoyés au groupe, tout message reçu est
affiché (écrit sur la sortie standard).
3. L’utilisateur ne veut pas voir le message qu’il a envoyé s’afficher deux fois (une lors de
la saisie et une lors de la réception), proposer une solution.

Exercice 2 Sémaphores
Fréquemment, un nombre de threads sont amenés à partager un nombre fixé de ressources
(exemple nombre limité de connexions à une base de données). Un sémaphore permet de
mettre en place le comportement suivant : à chaque fois qu’un thread est autorisé, le nombre
de connexions disponibles est décrémenté d’une unité. A la fin de la connexion, le nombre de
connexions disponibles est incrémenté. S’il ne reste plus de connexions disponibles, les threads
sont bloqués jusqu’à la libération d’une connexion.
1. Implémenter une classe Sémaphore avec deux méthodes :
— acquire () qui laisse le thread continuer s’il y a des connexions disponibles. Le thread
est bloqué sinon.
— release () qui permet au thread de signaler la libération d’une ressource.
2. Trouver deux autres applications des sémaphores.

Exercice 3 Thread Pool


— Analyser le code suivant et expliquer son utlité
— Comment les sémaphores peuvent etre utilisées pour réaliser un thread pool ?
1 c l a s s WebServer {
2 E x e c u t o r p o o l = E x e c u t o r s . newFixedThreadPool ( 7 ) ;
3 public s t a t i c void main ( S t r i n g [ ] a r g s ) {
4 S e r v e r S o c k e t s o c k e t = new S e r v e r S o c k e t ( 8 0 ) ;
5 while ( true ) {
6 f i n a l Socket connection = socket . accept ( ) ;
7 Runnable r = new Runnable ( ) {
8 public void run ( ) {
9 handleRequest ( connection ) ; }
10 };
11 pool . execute ( r ) ;
12 }
13 }
14 }

1/1 Khaled Barbaria

Vous aimerez peut-être aussi