:: Enseignements :: ESIPE :: E4INFO :: 2012-2013 :: Applications réseaux ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Encoder et decoder en NIO
|
Exercice 1 - Bizarre vous avez dit bizarre
Récuperer les fichiers
ClientBizarre.java et
ServerBizarre.java.
Au total, le client envoie les octets:
97 98 99 226 130 172 100 101 102 226 130
qui en UTF-8 s'interprètent comme suit:
97 -> a
98 -> b
99 -> c
226 130 172 -> €
100 -> d
101 -> e
102 -> f
226 130 -> mal formed
-
Lancer le serveur, puis le client et expliquer le comportement observé.
-
Corriger le code de ServerBizarre en utilisant la méthode decode à 3 paramètres.
Si votre processus de décodage est correct, vous devez afficher:
abc€def*
Exercice 2 - Compter les lignes
On veut réaliser un serveur CountServer qui prend un flux d'entrée
qu'il interprète comme une suite de caractères UTF-8 et qui renvoie une suite
d'int en BigEndian correspondant au nombre de caractères lus dans
chaque ligne. Les caractères mal encodés du flux d'entrée sont ignorés.
Par exemple, si le client envoie les octets codant:
abcd
a€e
le serveur renverra à ce client les
int 4 et 3 en BigEndian.
Pour tester votre serveur, vous pouvez récupérer le client
CountClient.jar et
le fichier
test1.txt et
test2.txt. On le lance
$java -jar CountClient.jar test1.txt localhost 7777
java fr/upem/tcp/CountClient test1.txt localhost 7777
8
4
8
6
$java -jar CountClient.jar test2.txt localhost 7777
4
2
3
6
où
test1.txt est le nom du fichier à envoyer et
localhost 7777 est l'adresse du serveur.
Exercice 3 - Serveur de décodage
On veut réaliser un serveur
ReencodeServer qui prend un flux d'entrée
qu'il interprète comme une suite de caractères UTF-8 et renvoie ce flux encodé
dans un
Charset destinationCharset spécifié par le client.
Les caractères qui ne peuvent pas être encodés dans le flux de sortie sont ignorés.
Le protocole est le suivant:
-
Le client envoie le nom du destinationCharset comme suit: il envoie
un int en BigEndian correspondant au nombre n d'octets pour
écrire destinationCharset en ASCII suivi des n octets correspondant.
-
Le serveur renvoie l'octet 0 si destinationCharset est disponible sur le
serveur et l'octet 1 sinon (dans ce cas le serveur ferme la connexion).
-
Le client écrit le flux des octets à réencoder puis il ferme
la connection en sortie.
-
Le serveur renvoie le flux d'octets correspondant au flux d'entrée réencodé dans
le Charset destinationCharset.
- Réaliser un serveur ReencodeServer qui prend en argument le port
d'écoute. Pour tester votre serveur, vous pouvez récupérer le client
ReencodeClient.jar et
le fichier test.txt. On le lance par
$java -jar ReencodeClient.jar test.txt ASCII localhost 7777
zaeazeazeazeazeazeazezaaze
$java -jar ReencodeClient.jar test.txt latin1 localhost 7777
zaeazeazeazeazeazeazezaazeææÂêæÂêæÂæêæêÂæÂæêÂ
où test.txt est le nom du fichier à envoyer, ASCII est
le nom du destinationCharset et localhost 7777 est l'adresse du serveur.
-
Modifier votre serveur pour qu'il rajoute à la fin du flux réencodé, la phrase
X characters could not be converted.
© Université de Marne-la-Vallée