Vous êtes sur la page 1sur 2

Li

en e et IUP GMI 20022003


Réseaux

TP1. Serveur de dialogue en ligne.

Gilles Grimaud, Sébastien Jean, Simon Duquennoy

Exer i e 1 : Première expérien e


Le but i i est de réaliser en Java un petit programme qui a epte des onnexions et a he le as
é héant  bienvenue sur MonServeur  avant de rompre la ommuni ation.
Il faut tout d'abord réer une lasse Java MonServeur qui attend une onnexion de type TCP et qui
envoie le message de bienvenue. Libre hoix est laissé sur le port utilisé.
N.B. : Pour réaliser e programme il faudra utiliser les lasses So ket et ServerSo ket du pa kage
java.net ainsi que la lasse PrintStream du pa kage java.io qui permet de onvertir des haînes de
ara tères (String) odées en UNICODE vers un ot de sortie standard (ASCII en général). L'aide
est disponible en ligne à l'URL : http ://da2i.univ-lille1.fr/do /jdk-1.3.1/api/index.html ou
file ://usr/lo al/jdk-1.2.2/do s
Q 1 . Quelles sont les étapes du traitement d'une requête ?
Q 2 . Quelles sont les ex eptions parti ulières pouvant empê her le programme de fon tionner nor-
malement ? S'assurer que le programme traite onvenablement haque problème pouvant survenir, en
informant l'administrateur de votre serveur des problèmes ren ontrés.
Q 3 . Une fois le programme réalisé, omment en tester le bon fon tionnement ?
Q 4 . S'assurer que le programme mar he en bou le, 'est à dire, qu'il traite plusieurs requêtes les unes
après les autres. Ce faisant, le serveur peut re evoir une su ession de requêtes de diérentes ma hines.
Comment garder la tra e de toutes es onnexions sur le serveur ?

Exer i e 2 : Serveur de dialogue


L'obje tif est i i de faire évoluer le serveur pré édent de sorte qu'il a epte plusieurs onnexions
simultanément. L'idée est de permettre à haque utilisateur qui se onne te sur le serveur d'envoyer
des messages que tous les autres utilisateurs onne tés re evront. Pour ela, haque nouvelle onnexion
dé len hera hez le serveur la réation d'un nouveau Thread qui prendra en harge la nouvelle onnexion.
Les Thread attendent des messages sur la So ket dont elles ont la harge. Lorsqu'un message est reçu
(sous la forme d'une haîne de ara tères) la tâ he le répète sur toutes les so kets des autres onnexions.
Q 1 . Comment et quand réer un nouveau Thread pour un nouvel utilisateur dans le programme prin-
ipal ?
Q 2 . Quelles sont les primitives permettant de re evoir des haînes des ara tères (String) sur une
So ket ?
Q 3 . Comment faire pour retransmettre es haînes vers tous les autres utilisateurs onne tés ?
Q 4 . Il est di ile dans e ontexte de déte ter la terminaison de l'a tivité d'un lient. On dé ide que si
une phrase envoyée par un utilisateur ommen e par "bye" alors ette ligne de texte doit être retransmise
à tout les autres onne tés, mais qu'ensuite l'utilisateur qui a é rit "bye" perd la onnexion. Que faut-il
hanger au programme ? Comment tenir informé l'administrateur du serveur de e hangement ?

1
Exer i e 3 : Appro he évènementielle
Le serveur de dialogue de l'exer i e pré édent gère les onnexions TCP simultanées en réant un
Thread par onnexion. Cette solution est sous-optimale. En eet, lorsqu'un lient se onne te, un nouveau
Thread est réé et est maintenu (passant la majeure partie de son temps en attente de messages) pendant
toute la session du lient. Un serveur onstruit ave ette appro he verra sa onsommation mémoire
exploser ave le nombre de lients gérés simultanément.
Une solution à e problème s'appuie sur l'utilisation des NIO (New I/O) de java. Construites à partir de
la primitive POSIX sele t(), les NIO permettent (entre autres) de réaliser une attente sur un ensemble
de onnexions TCP. Il devient alors possible de gérer toutes les onnexions dans un unique Thread.
L'attente d'évènements peut se faire de manière a tive ou passive. L'attente a tive onsiste à s ruter
en permanen e l'arrivée d'informations à traiter. Elle provoque une forte onsommation des ressour es du
pro esseur (qui bou le en permanen e). L'appro he passive utilise une primitive qui se bloque en attente
de données à traiter. Pendant e blo age, le pro essus est ina tif et libère le pro esseur. C'est pourquoi
il vous est demandé d'implémenter le serveur de hat en utilisant des attentes passives.
N.B. : Pour réaliser e programme, il faudra utiliser le pa kage java.nio ainsi que (entre autres)
les lasses ServerSo ketChannel, Sele tor et Sele tionKey. La do umentation des NIO est disponible
en ligne à l'URL : http: // java. sun. om/ j2se/ 1. 4. 2/ do s/ api/ java/ nio/ pa kage-summary.
html .
Q 1 . Comment gérer l'arrivée de nouvelles onnexions ?
Q 2 . Comment gérer la retransmission des messages reçus aux utilisateurs ?
Q 3 . Critiquer la manière dont e serveur est réalisé :
 qu'en est-il de l'usage du réseau ?
 quelle démar he adopter en utilisant toujours IP ?
 sera t'il en ore possible d'utiliser Telnet en guise de lient ?

Vous aimerez peut-être aussi