:: Enseignements :: Master :: Master TTT :: 2012-2013 :: Programmation réseau en Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Premiers pas en TCP |
Exercice 1 - Un client TCP netcat-like
On ne présente plus
netcat : on souhaiterait maintenant implanter un client TCP en Java avec un comportement similaire. On implante à cet effet une classe
fr.upemlv.javares.TCPTextClient pouvant être exécutée avec la commande :
java fr.upemlv.javares.TCPTextClient serverAddress port charset
Ce client créé une socket TCP locale se connectant sur le serveur distant de coordonnées spécifiées. On lit une ligne sur l'entrée standard (
System.in), on l'envoie vers le serveur distant en l'encodant avec le charset spécifié puis on lit une ligne de réponse en provenance du serveur. On répète ce cycle jusqu'à ce que soit l'utilisateur ferme l'entrée standard (Ctrl-D en console), soit le serveur mette fin à son flux sortant. On peut alors fermer la socket locale.
- Écrire la classe TCPTextClient réalisant le travail demandé. Quelles classes peut-on employer pour la lecture des lignes sur l'entrée standard, l'envoi et la lecture de lignes du serveur ? On veillera à bien respecter le charset spécifié aussi bien pour la lecture que pour l'écriture de lignes
- Que se passe-t-il si le serveur ne renvoie pas une ligne complète de réponse à chaque ligne envoyée par le client ? Proposer une solution (imparfaite) au problème en utilisant setSoTimeout(int timeoutInMillis) sur la socket client.
Exercice 2 - Un serveur TCP torturant les lignes
Il est question désormais d'implanter un méchant serveur TCP torturant des lignes de texte. Ce serveur antipathique traite les clients les uns à la suite des autres. Un client lui communique une ligne de texte, le serveur la transforme et renvoie la ligne modifiée au client, ..., on répète le processus jusqu'à recevoir une ligne "QUIT" : on ferme alors (proprement) la connexion après avoir envoyé une ligne d'au revoir au client. On peut alors ensuite accueillir le client suivant en attente.
Nous avons carte blanche pour les opérations de torture imposées aux lignes (mises en majuscule, substitutions de lettres...).
- Écrire une classe implantant le serveur TCP décrit précédemment.
- Ajouter une commande "SHUTDOWN" que pourra envoyer un client afin de fermer proprement le serveur.
Exercice 3 - Le nombre mystère
Le jeu du nombre mystère consiste à deviner un nombre tiré aléatoirement. Nous réalisons un serveur qui accueille un client souhaitant jouer : le serveur tire un nombre au hasard et le client envoie ses propositions. Chaque proposition est un entier int sur 4 octets transmis en commençant par l'octet de poids fort (par exemple l'entier 424242 en base décimale s'écrit 00067932 en hexadécimal : on transmet l'octet de poids fort 0, puis 06, puis 79 puis 32). En retour le serveur nous indique par un octet si l'on a trouvé le nombre mystère (0), si le nombre mystère est plus petit (1) ou s'il est plus grand (2). Si le client n'a pas trouvé le nombre, il continue de faire des propositions.
- Implanter le serveur de nombre mystère.
- Implanter le client de nombre mystère. Le client recueille les propositions de l'utilisateur en lisant ligne par ligne sur l'entrée standard et il affiche les réponses du serveur sur la sortie standard.
© Université de Marne-la-Vallée