:: Enseignements :: ESIPE :: E4INFO :: 2012-2013 :: Applications réseaux ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Client TCP en IO
|
Exercice 1 - TCP Longue Somme de Long
Récupérez le serveur
TCPLongSumServer.jar, qui prend
en argument le nombre de clients qu'il est capable de servir simultanément, le port
sur lequel il attend les connexions de clients. Par exemple, lancez-le sur votre machine par
% java -jar TCPLongSumServer.jar 5 7777
Ce serveur lit des
long en BigEndian et une fois le flux (d'entrée)
fermé par le client, il écrit un long en BigEndian qui correspond à la somme
de tous les
long reçus.
Développez un client, TCPLongSumClient, qui prend en argument
l'adresse et le port du serveur. Ce client lit des long
au clavier qu'il envoie au serveur jusqu'à ce qu'il lise -1. Ensuite
il ferme la sortie du flux et affiche la réponse du serveur.
Vous utiliserez les fonctions longToByteArray et ByteArrayToLong du TD 2.
Lancez un serveur TCPLongSumServer qui ne peut traiter q'un seul client à la fois et lancez deux clients. Expliquez ce que vous observez.
Exercice 2 - Client TCP simple
Écrire un client TCP simple (
SimpleTCPClient) qui,
après s'être connecté à un serveur TCP, réalise de manière itérative
les opérations suivantes:
-
lit une ligne de texte (chaîne de caractères terminée par une fin de ligne)
depuis l'entrée standard;
-
écrit cette ligne de texte (dans un encodage pris en paramètre sur la ligne commande) sur la connexion TCP à destination du serveur en la terminant par une fin de ligne;
-
lit une ligne de texte (chaîne de caractères terminée par une fin de ligne)
depuis la connexion TCP (réponse en provenance du serveur);
-
affiche cette ligne de texte sur la sortie standard en la terminant par une fin de ligne.
Ce client doit être démarré en spécifiant le nom (ou l'adresse IP) du serveur et le port auquel
il doit se connecter ainsi que l'encodage qu'il doit utiliser
pour échanger les chaînes de caractères avec serveur. Par exemple:
% java fr.upem.tcp.SimpleTCPClient localhost 7777 UTF-8
ou encore
% java fr.upem.tcp.SimpleTCPClient gaspard.univ-mlv.fr 7 ASCII
Pour tester,
gaspard.univ-mlv.fr implémente sur son port 7 un service Echo,
mais vous pouvez également installer sur votre propre machine le petit serveur
TCPUpperCaseServer.jar, qui prend
en argument le nombre de client qu'il est capable de servir simultanément, le port
sur lequel il attend les connexions de clients et l'encodage des chaînes de caractères
qu'il utilise. Par exemple, pour tester votre client, lancez-le sur votre machine par
% java -jar TCPUpperCaseServer.jar 5 7777 utf-8
Ce serveur,
TCPUpperCaseServer.jar, accepte une option
-slow qui simule un temps de traitement par le serveur.
En relancant ce serveur comme ceci:
% java -jar TCPUpperCaseServer.jar -slow 5 7777 utf-8
quels sont les problèmes que pose votre client
SimpleTCPClient?
Rencontrez vous les mêmes problèmes avec netcat (
nc localhost 7777)?
Développez un nouveau client, TCPClient, qui permet de palier ces inconvénients:
il doit permettre à tout moment d'envoyer une ligne au serveur, et simultanément
à tout moment d'afficher une ligne en provenance du serveur, et ce de manière décorrélée.
On veut que le client s'arrête lorsque la ligne lue se termine par un point.
Attention, on ne veut pas que le client s'arrête avant d'avoir lu toutes les données envoyées par le serveur.
Lorsque le serveur ferme la socket (s'il meurt par exemple), comment pouvez
vous arrêter d'écouter sur l'entrée standard (clavier) du client?
© Université de Marne-la-Vallée