:: Enseignements :: Master :: M1 :: 2009-2010 :: Programmation d'Applications Réseaux ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
TCP non bloquant
|
Exercice 1 - Mini additionneur TCP non bloquant
On souhaite écrire un serveur qui accepte de
multiples clients en non-bloquant et permettant d'effectuer l'addition
de deux entiers pour chaque client.
Pour simplifier, on vous donne le code du client, qui demande 2 entiers
au clavier, les envoie en serveur et attends la réponse du serveur.
Ecrire le code du serveur non bloquant.
Exercice 2 - Un serveur Echo bizarre en non-bloquant
Écrire un serveur qui accepte de
multiples clients en non-bloquant. Il se comportera comme un serveur
Echo classique, mais il doublera toutes les lettres A.
Vous utiliserez pour cela un sélecteur (java.nio.channels.Selector).
Attention aux tailles des buffers...
Pour simplifier le développement, le serveur ne possèdera
qu'une unique thread, et on considerera les bytes comme des caractères (ascii).
-
Rappeler le principe d'un sélecteur et comment
on doit enregistrer un channel en accept, connection, read
ou write.
-
Enregistrer le ServerSocketChannel
pour être prévenu lors d'un accept,
et faire un affichage indiquant le client qui se connecte.
-
Lors d'un accept, dans un premier temps,
enregistrer directement le SocketChannel
en read.
Lorsque que le SocketChannel est ok pour le read,
on enregistre celui-ci pour le write en passant la réponse en tant
d'objet attaché de la clé de sélection.
-
Faire en sorte de gérer le accept/connection de
façon non-bloquante.
N'oubliez pas de tester avec plusieurs clients en parrallèle, avec des buffers de petites tailles, etc.
Exercice 3 - Écrire un proxy TCP en non-bloquant
Ré-écrire le proxy TCP en utilisant les sélecteurs.
Il faudra penser à s'enregistrer en connect lors de l'établissement
de la connection avec le serveur.
Pour vous faciliter la tâche, nous vous offrons un petit bout de ce proxy.
Dans l'implémentation choisie, ClientEventHandler simule un thread
comme dans la version bloquant. Attention cependant, les clefs du selecteur sont
affectées aux SocketChannels...
© Université de Marne-la-Vallée