Java / Socket, I/O, Thread
Java / Socket, I/O, Thread
R´
ealisation d’un
multiplexeur
11 octobre 2004
Jean-Pierre Le Narzul
el´ecom Bretagne epartement RSM
Java / Socket, I/O, Thread
1 Socket, I/O et threads
La mise en œuvre de l’application n´ecessite la connaissance de :
L’interface Java aux sockets (package java.net).
L’interface Java pour ealiser des entr´ees/sorties (package java.io).
L’interface Java `a la gestion de threads.
1.1 Java.net
Le package java.net contient un ensemble de classes, d’interfaces et de
classes d’exception permettant de evelopper des programmes ´etablissant des
communications r´eseau avec d’autres applications. Nous allons utiliser ce pa-
ckage pour d´efinir un serveur r´epondant `a des demandes de connexion telnet.
La figure 1 est un sous-ensemble (tr`es eduit) du package java.net. Elle
repr´esente les classes et interfaces dont vous aurez besoin pour r´ealiser l’appli-
cation.
La documentation compl`ete du package est disponible en http://intra-
rennes.enst-bretagne.fr/moyens/java/doc.htm
IOException
SocketException
ConnectExceptionBindException
ServerSocket Socket
Exception
Classes Classes exception
Object
Fig. 1–Sous-ensemble de java.net
Un objet ServerSocket encapsule une extrˆemit´e de communication pour
un serveur gestionnaire de connexion TCP. Sur r´eception d’une demande de
connexion, il cr´ee une autre extrˆemit´e de communication (Socket) sur laquelle
il peut ´echanger des donn´ees avec un client. Les documentations des classes
ServerSocket et Socket sont fournies `a la fin de ce document ; vous y trouverez
toutes les informations dont vous aurez besoin.
Ne cherchez pas `a retrouver dans l’interface des classes Java toutes les fonc-
tions C auxquelles vous ˆetes habitu´e. L’un des int´erˆets de l’utilisation des classes
du package java.net est d’encapsuler la complexit´e de gestion des sockets.
el´ecom Bretagne epartement RSM
1.2 Java.io Java / Socket, I/O, Thread
1.2 Java.io
Le package java.io contient un ensemble de classes, d’interfaces et de classes
d’exception permettant de r´ealiser des entr´ees/sorties. Une modification impor-
tante a ´et´e apport´ee `a ce package dans la version 1.1 de Java (celle que nous
utilisons). Un sous-arbre suppl´ementaire de classes a ´et´e ajout´e afin de g´erer
les entr´ees/sorties de type caract`ere (sur 16 bits). L’autre sous-arbre (d´evelopp´e
pour la 1.0) est toujours disponible et permet de g´erer les entr´ees/sorties pour
des octets (sur 8 bits).
La figure 2 est un sous-ensemble du package java.io eduit `a quelques classes
d’entr´ees (le sous-arbre des classes de sorties se d´eduit facilement `a partir de
celui des classes d’entr´ees).
BufferedInputStream
InputStream
FilterInputStream
Object
Classes Reader Classes InputStream
FilterReader
Reader
BufferedReader InputStreamReader
LineNumberReader DataInputStream
FileInputStream
Fig. 2 – Sous-ensemble de java.io
1.2.1 Flˆots d’octets
Les flˆots d’octets sont manipul´es par les classes se terminant par Stream.
Il est possible de chaˆıner plusieurs objets FilterInputStream pour lire des
donn´ees. Par exemple, la figure 3 repr´esente un chaˆınage pour lire des donn´ees
d’un fichier. Le premier objet permet d’acc´eder au fichier ; le second optimise les
acc`es en bufferisant les donn´ees, le troisi`eme facilite l’interpr´etation des donn´ees
par l’application en offrant des m´ethodes pour lire des types de base Java (Float,
Double, etc.).
Lors de la constitution d’un chaˆınage, le premier objet (celui qui acc`ede `a
la source) doit ˆetre un InputStream (par exemple, un FileInputStream dans
le cas de notre exemple) ; les suivants doivent ˆetre des FilterInputStream (un
BufferedInputStream et un DataInputStream dans notre exemple).
Le code java correspondant `a l’´etablissement du chaˆınage de la figure 3 est
le suivant :
FileInputStream fis = new FileInputStream ("un_fichier");
el´ecom Bretagne epartement RSM
1.2 Java.io Java / Socket, I/O, Thread
BufferedInputStream
readFloat readDouble
DataInputStream
jnfdefnewifh83rh
hf8739ijfj29udsi92e
fgpkdfggdfger
dfgdfg
dfgdfgdfg
FileInputStream
Fig. 3–Chaˆınage de filtres InputStream
BufferedInputStream bis = new BufferedInputStream (fis);
DataInputStream dis = new DataInputStream (bis);
...
double d = dis.readDouble();
...
1.2.2 Flˆots de caract`eres
La version 1.1 de java a introduit les classes Reader pour manipuler des
caract`eres coes sur 16 bits suivant un codage sp´ecifique. Les flˆots de caract`eres
sont manipul´es par les classes se terminant par Reader.
jnfdefnewifh83rh
hf8739ijfj29udsi92e
fgpkdfggdfger
dfgdfg
dfgdfgdfg
FileReader
BufferedReader
readLine
Fig. 4 – Chaˆınage de filtres Reader
Par exemple, la figure 4 repr´esente un chaˆınage pour lire des lignes de texte
d’un fichier. A quelques exceptions pr`es, la hi´erarchie des classes Reader est
calqu´ee sur la hi´erarchie des classes Stream. On retrouve donc la possibilit´e d’en-
chainer des FilterReader (mˆeme principe que pour les FilterInputStream).
Une classe sp´ecifique, InputStreamReader, permet d’´etablir un pont entre
un flˆot d’octets et un flˆot de caract`eres. Un objet InputStreamReader se place
el´ecom Bretagne epartement RSM
1.3 Threads Java / Socket, I/O, Thread
InputStream
BufferedReader
Réseau
InputStreamReader
readLine
Fig. 5–Utilisation de InputStreamReader
devant un objet InputStream. Par exemple, la figure 5 repr´esente un chaˆınage
pour lire des lignes de texte sur une socket.
1.3 Threads
Reportez-vous aux copies des transparents et `a la documentation Javadoc
pour la description de l’utilisation des threads. Les classes et interfaces associ´ees
sont dans le package java.lang.
2 Mise en œuvre de l’application
L’application `a ealiser est un serveur multiplexeur de flˆots clients telnet.
Pour cette premi`ere partie, le multiplexage consistera `a afficher sur la sortie
standard, les lignes de textes envoy´ees par les clients.
Pour tester votre serveur, vous utiliserez le programme telnet de la mani`ere
suivante :
user@host: telnet nom_host_de_votre_serveur no_port_serveur
Trying 193.52.74.202...
Connected to nom_machine_ou_s_execute_votre_serveur
Escape character is ’^]’.
Je tape du texte de maniere interactive sous telnet
hello
2.1 ealisation d’un serveur ((mono-thread))
Le serveur attend une demande de connexion d’un client telnet. Lorsqu’une
demande est re¸cue, la communication est ´etablie avec le client. Le serveur se
contente de recopier sur la sortie standard (System.out) les lignes de textes
envoy´ees par le client.
Action 1 Programmez une classe ServeurTelnet mettant en œuvre le serveur.
el´ecom Bretagne epartement RSM
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !