1
© Philippe GENOUD UJF Novembre 2006
1
Programmation
client/serveur
(sockets sur TCP/IP)
java.net
Programmation
client/serveur
(sockets sur TCP/IP)
java.net
© Philippe GENOUD UJF Novembre 2006
2
Communications sur Internet
Communications sur Internet
Pour communiquer sur Internet les ordinateurs utilisent différents protocoles :
TCP (Transfert Control Protocol) protocole destiné aux applications nécessitant
une communication fiable et robuste. Permet d’établir une connexion fiable
entre deux machines
pas de perte d’information
respect de l’ordre dans lequel les informations sont envoyées et reçues
les applications sont prévenues si la communication est interrompue
UDP (User Datagram Protocol) protocole qui permet l’envoi de paquets
indépendants (datagrammes) d’un ordinateur à un autre sans garantie quand à
leur arrivée
plus rapide mais moins fiable
2
© Philippe GENOUD UJF Novembre 2006
3
Applications réseau Java
Applications réseau Java
Applications
HTTP, ftp, telnet, …
Transport
TCP, UDP, …
Réseau
IP, …
Couche de base
Device driver
Couche Physique
Ethernet, …
De nombreuses applications
se basent sur ces protocoles
Application Java
java.net
Package standard qui permet aux
programmes Java de réaliser des
communications réseau de façon
indépendante du système
Représente une
adresse IP
Connexions TCP/IP
Connexions UDP
Socket ServerSocket
DatagramSocket DatagramPacket
InetAdress
URL URLConnection
Object
HttpURLConnection
Connexions à un
serveur HHTP
© Philippe GENOUD UJF Novembre 2006
4
Serveur
Serveur
port
Sockets et applications Client/Serveur
Sockets et applications Client/Serveur
Le programme serveur possède un « socket » associé
à un numéro de port spécifique
Le serveur est en attente d’une demande de connexion
Le client connaît la machine hôte
(hostname ou numéro IP) et le
numéro de port auquel est connecté
le serveur
2) Le client effectue une demande de connexion
3) Le serveur accepte la connexion
Serveur
Serveur
port
1) Le programme serveur tourne sur une machine hôte spécifique
port
Client
Client
port
Serveur
Serveur
port
Client
Client
Attribution d’un nouveau socket (et
d’un nouveau numéro de port)
Attribution d’un socket
(et d’un numéro de port)
2 flots de données sont établis entre les deux machines :
Le client et le serveur peuvent communiquer en écrivant ou en
lisant dans leur socket
connexion
demande de
connexion
Client
Client
3
© Philippe GENOUD UJF Novembre 2006
5
Sockets TCP dans java.net
Sockets TCP dans java.net
Assymétrie des connexions
Deux classes pour les sockets en mode connecté (TCP)
ServerSocket
Encapsule le socket du serveur
Pour s’initialiser un ServerSocket a besoin d’un numéro de port
Attente et acceptation des demandes de connexion
Socket
Encapsule le socket du client
Pour s’initialiser un Socket a besoin d’une adresse IP et d’un
numéro de port
Demande de connexion avec le serveur
© Philippe GENOUD UJF Novembre 2006
6
Client / Serveur avec java.net : principe
Client / Serveur avec java.net : principe
ServerSocket svs =
new ServerSocket(port#)
svs.accept() Socket sc =
new Socket(host, port#)
Socket s =
Sortie de accept
retour d’un objet
Socket
sc.close()
s.close()
svs.close()
InputStream
OutputStream InputStream
OutputStream
(3) Etablir la
connexion
(4) Utilisation
du socket
(5) Fermer la
connexion
(1) Le serveur
enregistre
son service
(2) Le serveur se
met en attente de
connexion
(4) Utilisation
du socket
(5’) Fermer la
connexion
(6) Fermer le
service
socket
socket
Client
Serveur
Canal TCP
Le client doit être démarré après le serveur.
Si le serveur n’a pas encore démarré, levée
d’une exception après un time-out
close() ferme (détruit) le socket côté
client comme côté serveur
4
© Philippe GENOUD UJF Novembre 2006
7
Echanges entre client et serveur
Echanges entre client et serveur
Pour échanger des données le serveur et le client utilisent les flux d’entrée/sortie
fournis par leur socket :
Un objet java.io.InputStream pour la lecture retourné par la méthode
getInputStream() de Socket
Un objet java.io.OutputStream pour l’écriture retourné par la méthode
getOutputStream() de Socket
InputStream et OutputStream sont les classes du package java.io
proposant les primitives de base pour la lecture et l’écriture sur un flux d’entrée ou
de sortie
Deux types d’échanges sont possibles
Échanges en mode ligne (chaînes de caractères)
Echanges en mode bloc d’octets (bytes)
© Philippe GENOUD UJF Novembre 2006
8
Les classes d'entrées/sorties
Les classes d'entrées/sorties
Quelques classe du package java.io
Flux d'entrée
InputStream
FileInputStreamFilterInputStream
BufferedInputStream
ByteArrayInputStream
Reader
InputStreamReader
FileReader
BufferedReader
OutputStream
FileOutputStreamFilterOutputStream
BufferedOutputStream
Flux de sortie
ByteArrayOutputStream
Writer
InputStreamWriter
FileWriter
BufferedWriter
Flux d'octets Flux de caractères
5
© Philippe GENOUD UJF Novembre 2006
9
Echanges en mode ligne
Echanges en mode ligne
Requêtes et réponses sont constituées d’une ou plusieurs lignes de texte
(ASCII 7 bits, UTF-8, ISO-8859-1 (Latin-1) …)
Exemple : HTTP, SMTP, …
Utilisation des classes d’entrées/sorties du package java.io
BufferedReader
BufferedWriter
Attention :
Variation des terminateurs de ligne selon les OS
LF '\n' , CR '\r' , CRLF '\r' '\n'
Encodage n’est pas supporté par tous les langages
Certains protocoles (HTTP, SMTP …) limitent la longueur des lignes
© Philippe GENOUD UJF Novembre 2006
10
Echanges en mode ligne
Echanges en mode ligne
Le flux d’entrée
InputStream in = maSocket.getInputStream();
InputStreamReader isReader = new InputStreamReader(in);
BufferedReader buffReader = new BufferedReader(isReader);
String line = buffReader.readLine();
1) Obtention d’un flux (stream) d’entrée simple :
définit les opérations de base
2) Création d’un stream convertissant
les octets (bytes) reçus en char
3) Création d’un stream de lecture avec
tampon pour lire ligne par ligne dans
un stream de caractères
4) Lecture d’une ligne (chaîne de
caractères)
1 / 10 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 !