Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle
Support de cours labor avec laide de lquipe pdagogique du cours de SI
1 - Principes des sockets en Java - Principes de base - Principales classes Java 2 - Programmation avec des sockets en Java - Sockets UDP en Java - Sockets TCP en Java 3 Flux de donnes de haut niveau en TCP
2
Principes de base
Permettent lchange de messages entre 2 processus, entre 2 machines 1- Chaque machine cre une socket, 2- Chaque socket sera associe un port de sa machine hte, 3- Les deux sockets seront explicitement connectes si on utilise un protocole en mode connect , 4- Chaque machine lit et/ou crit dans sa socket, 5- Les donnes vont dune socket une autre travers le rseau, 6- Une fois termin chaque machine ferme sa socket. rseau
serveur
ports
client
4
Principes de base
Les sockets sont des objets (bien sur!) Les sockets TCP doivent tre associes des flux (in et out) facilits de lecture et dcriture par la suite
Classes de sockets :
DatagramSocket() : client
UDP
TCP
ServerSocket
Syntaxe Java
Syntaxe Java
Syntaxe Java
(cot serveur)
implicite
Socket accept() : coute la socket et attend une requte de connection, retourne une nouvelle socket sur laquelle couter le nouveau client (et lui seul) listen
implicite
Syntaxe Java
10
11
serveur
client
serveur
DatagramSocket(#port)
client
DatagramSocket
serveur
client
DatagramPacket(@server,#port)
serveur
DatagramSocket.close
17
serveur serveur
ServerSocket(#port)
client
serveur
ServerSocket.accept()
serveur
ServerSocket.accept()
client
Socket(@server,#port)
serveur
ServerSocket.accept() "fork" serveur
client
serv.
client
18
client
Socket.open-stream
serveur
serv.
client
Socket.r/w
ServerSocket.accept() Socket.r/w
serveur
serv.
Socket.close-stream
client
Socket.close-stream
serveur
serv.
Socket.close
client
Socket.close
serveur
ServerSocket.close()
19
10
22
11
23
24
12
13
27
On cre des routines et objets qui ralisent la transformation : donnes tableau de bytes Et la transformation inverse : tableau de bytes donnes
Et on peut envoyer et recevoir directement des objets comme des Strings (ou des float, ou des double ) !
28
14
Server Client
ServerSocket Socket
Socket
Socket.getInputStream() Socket.getOutputStream()
new PrinterWriter ( the output stream ,true) new BufferedReader ( new InputStreamReader ( the input stream ))
PrintWriter PrintWriter
advsout.println()
15
16