:: Enseignements :: ESIPE :: E4INFO :: 2012-2013 :: Applications réseaux ::
[LOGO]

Client UDP, respect de l'encodage des caractères


Exercice 1 - Client echo UDP

Écrire un client UDP permettant d'interroger le démon Echo (RFC 862) qui est accessible sur le port 7 d'une machine. Vous pouvez tester ce service en lancant la commande nc -u gaspard 7.
Contrairement à nc, on attend de votre client qu'il soit verbeux et donne de nombreuses informations. Par exemple :
$ java fr.upem.net.udp.EchoUDPClient gaspard 7 "Mon beau message, roi des machines"
socket locale attachée :
à l'adresse 0.0.0.0/0.0.0.0:1044
34 octets émis vers gaspard/193.55.63.81:7
capacité de la zone de stockage : 44
34 octets recus
contenant : Mon beau message, roi des machines
provenant : de gaspard.univ-mlv.fr/193.55.63.81:7
Vous utiliserez pour cela les classes java.net.DatagramSocket et java.net.DatagramPacket. Vous utiliserez le même DatagramPacket pour la réception et pour l'envoi. Puisqu'on utilise le protocole Echo, on utilisera l'encodage par défaut de la machine cliente lors de l'envoi et de la réception des messages texte.

Exercice 2 - Respecte mon encodage

On souhaite écrire un client UDP permettant d'interroger un serveur de mise en majuscule de chaînes de caractères. Pour illustrer l'importance de l'encodage des chaînes de caractères, nous allons utiliser un serveur qui est paramétré pour prendre en charge un encodage précis. Pour ce faire récupérez le serveur UDPUpperCaseServer.jar et lancez le sur votre machine avec un encodage différent de celui par défaut (e.g. Latin1 si vous êtes sous UTF8 et inversement).

Vous pouvez tester avec netcat (nc) que si l'encodage de la machine cliente et celui précisé au lancement du serveur correspondent, la mise en majuscule s'effectue sans problème, mais que dans le cas où ils ne correspondent pas la mise en majuscule ne s'effectue pas (e.g. pour les lettres accentuées).

Écrire un client UDP permettant d'interroger le serveur de mise en majuscule lancé sur un port donné d'une machine host. On attend un fonctionnement du type :
        $ java fr.upem.net.udp.EncodedUDPClient 10.2.5.10 7777 "Autant arrêter le Java si c'est pour ça!" Latin1
        socket locale attachée :
        à l'adresse 0.0.0.0/0.0.0.0 au port 1044
        34 octets émis vers 10.2.5.10/10.2.5.10
        capacité de la zone de stockage : 44
        34 octets recus

        contenant : AUTANT ARRÊTER LE JAVA SI C'EST POUR ÇA!
        provenant : de 10.2.5.10/10.2.5.10:7777
   

Transformez votre code pour lire les chaînes de caractères au clavier et permettre plusieurs mises en majuscules.

Le jar accepte un 3ème argument (optionnel) sur la ligne de commande, qui correspond à la fiabilité (1, par défaut, si on le passe à 0.5, il jettera un paquet sur 2). Modifiez votre client de manière à afficher
Le serveur n'a pas répondu
si le serveur n'a pas répondu en moins d'une seconde.

Quelles solutions existent pour ignorer les packets ne venant pas du serveur ?