Contenu connexe
Similaire à Chap7 java net
Similaire à Chap7 java net (20)
Chap7 java net
- 1. Chapitre 7 : Java et les réseaux
La programmation réseau
Java
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 1
- 2. Sommaire
La programmation réseau
Rappel Réseau
Couches réseau et TCP-IP
Notion de Socket
Notion de Port
La classe URL
Les Sockets Java
TCP/IP et les principaux services
La classe InetAdress
Processus de Sockets
Exemple de process serveur
Exemple de process client simple et multi-clients
Datagram- Buffered stream- et Data Stream- sockets
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 2
- 3. Rappel couches réseau et TCP/IP
Source Christine Bulfone : Le client/Serveu©r et l’API socket
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 3
- 4. Présentation de L’API Socket
Source Christine Bulfone : Le client/Serveu©r et l’API socket
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 4
- 5. La notion de « socket »
API (Application Program Interface) socket
Mécanisme d'interface de programmation
permet aux programmes dʼéchanger des données
Les application ne voient les couches de communication quʼà travers
lʼAPI socket (abstraction)
n'implique pas forcément une communication par le réseau
le terme « socket » signifie douille, prise électrique femelle
Une connexion est entièrement définie sur chaque
machine par :
le type de protocole (UDP ou TCP)
l'adresse IP
le numéro de port associé
au processus serveur : port local sur lequel les connexions sont attendues
client : allocation dynamique par le système
Source Christine Bulfone : Le client/Serveu©r et l’API socket
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 5
- 6. La notion de « port »
Un service rendu par un programme serveur sur une machine est
accessible par un port
Un port est identifié sur une machine par un nombre entier (16 bits)
de 0 à1023 :
ports réservés assignés par l'IANA (Internet Assigned Numbers Authority)
donnent accès aux services standard :
> 1024
ports utilisateurs disponibles pour placer un service applicatif quelconque
Source Christine Bulfone : Le client/Serveu©r et l’API socket
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 6
- 7. java.net
La classe URL
accès à une URL pour le Web /** la Classe java.net.URL :
://Hote[:port]/cheminDacces * encaps. Uniform Resource Locator
*/
getFile(), getHost(), getPort(), public final class URL
getProtocol(), getRef() retournent extends Java.lang.Object
les champs de l’URL implements serealizable
{ ...
Les données référencée par l’URL public final Object getContent()
peuvent être téléchargée de 3 throws IOException;
public URLConnection
façons : openConnection();
par un objet URLConnection créé throws IOException;
par openConnection() public final InputStream
par un objet InputStream créé par openStream();
openStream() throws IOException;
public String toString();
par l’appel à getContents() qui }
retourne directement le contenu try
pour plus de contrôle utiliser la URL lt = new URL (“http://...”);
catch (MalformedURLException e) {
classe URLConnection //...traitement d’erreur
getContent-Length-Type-Encoding... }
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 7
- 8. java.net
Sockets Java
Sockets: Utilité des “Datagram sockets”
communication peer-ro-peer multicast :
possède un nom et une adresse réseau envoi de paquets à un groupe (ex.
Les types de sockets : NetBios)
Datagram sockets Il existe une classe (java 1.1)
MulticastSocket dérivée de
interface pour l’accès UDP (User
DatagramSocket
Datagram Protocol)
transmissions de paquets broadcast :
indépendants “sans “ garantie envoi de paquets à l’ensemble
Stream sockets des entités d’un réseau
interface pour l’accès TCP situation de découverte :
(Transmission Control Protocol)
découvrir des entités du réseaux,
guarantie de transmission...
nouveau service disponible
Raw sockets
interface au protocol IP (Internet
messagerie non critique :
Protocol) ou ICMP (Internet Control envoi de messages de contrôle
Message Protocol) d’activité non critiques “Je suis en
tests de nouveaux protocoles ou fcts vie”
évoluées
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 8
- 9. java.net
TCP/IP et les principaux services
Application NIS
NIS NFS
NFS
TELNET
Etc...
TELNET
Etc...
HTTP
SMTP
X11
FTP
HTTP
SMTP
X11
FTP
Présentation XDR
XDR
Session
Sockets
RPC
RPC
Transport UDP
UDP TCP
TCP
Réseau IP
IP
Liaison Ethernet
Ethernet FDDI
FDDI Token Ring
Token Ring Etc...
Etc...
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 9
- 10. java.net
La classe InetAdress
faire plus que télécharger un objet /** la Classe InetAdress:
* encapsulation d’une adresse IP
référencé par une URL. */
écrire un serveur par exemple... public final class InetAdress
accès à une adresse sur TCP/IP extends Java.lang.Object
{ // Methodes de classes
Net_id.Host_id.Port_ID public static InetAdress
206.24.45.100 getByName(String host)
“java.sun.com” throws UnknownHostException;
// ttes les @IP associées à un Host
Cette classe permet de se public static InetAdress []
connecter à un port d’un Host getAllByName(String host)
throws UnknownHostException;
Internet et d’écrire/lire des public static InetAdress
données des classes java.io. getLocalHost(String host)
throws UnknownHostException;
Pas de constructeur // Méthodes d’instances
utilisation de getLocalHost(), public boolean equals (Object obj);
getByName() ou getAllByName() public byte[] getAdress();
public getHostName();
tests sans le réseau... public hashCode();
//retourn le “localhost” public String toString();
addr = InetAddress.getByName(null); }
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 10
- 11. Processus de Sockets
Source Christine Bulfone : Le client/Serveu©r et l’API socket
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 11
- 12. java.net
Processus de Sockets - 1
creation et initialisation d’une Socket()
Socket() Serveur
“Socket” : appel de socket(...)
Socket()
Socket()
Client
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 12
- 13. java.net
Processus de Sockets - 2
Établissement d’un service sur un Socket()
Socket() Serveur
port de la machine serveur pour
être visible du réseau : bind(...) bind()
bind()
Socket()
Socket()
Client
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 13
- 14. java.net
Processus de Sockets - 3
attente de connexions, le serveur Socket()
Socket() Serveur
est prêt : appel de listen(...)
bind()
bind()
Socket()
Socket() listen()
listen()
un serveur “Datagram sockets”
un serveur “Datagram sockets”
Client n’utilise pas de listen() ::ililn’y a
n’utilise pas de listen() n’y a
pas de déroulement de sessions
pas de déroulement de sessions
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 14
- 15. java.net
Processus de Sockets - 4
Un Client initialise une connexion à Socket()
Socket() Serveur
un service : appel de connect()
bind()
bind()
Socket()
Socket() listen()
listen()
session
connect()
connect() accept() création
accept()
TCP thread
Client accept()
accept()
attente client
suivant
un serveur “Datagram
un serveur “Datagram Le serveur accepte la connexion
sockets” n’utilise pas
sockets” n’utilise pas accept() et déclenche un nouveau
de accept()
de accept() processus pour prendre en compte le
client
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 15
- 16. java.net
Processus de Sockets - 5
le client et le serveur échangent leurs Socket()
Socket() Serveur
données : en général par des read() et
write() dans un objet Stream “Datagram sockets” utilise
bind()
“Datagram sockets” utilise
bind()
send() et receive() plutôt que
send() et receive() plutôt que
Socket()
Socket() read() et write()
listen() write()
read() et
listen()
session
connect()
connect() accept() création
accept()
TCP thread
Client accept()
accept()
attente client
suivant
write()
write() read()
read()
nbXLab
read()
read() write()
write()
50
close()
close() close()
close()
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 16
- 17. java.net
Processus de Sockets - 6
fermeture du Socket : les sockets sont
des ressources limitées et doivent être Socket()
Socket() Serveur
fermées par les deux parties cliente et
serveur bind()
bind()
Socket()
Socket() listen()
listen()
session
connect()
connect() accept() création
accept()
TCP thread
Client accept()
accept()
attente client
suivant
write()
write() read()
read()
nbXLab
read()
read() write()
write()
50
close()
close() close()
close()
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 17
- 18. java.net
Exemple de serveur
/** un serveur tres simple qui renvoie ce PrintWriter out =
* qu’il reçoit : serveur miroir new PrintWriter(
*/ new OutputStreamWriter(
import java.io.*; socket.getOutputStream()));
import java.net.*; while (true) {
public class ServerMiroir { String str = in.readLine();
// Choisir un no de port non entre 1-1024 if (str.equals("END")) break;
static final int port = 8080; System.out.println
public static void main(String[] args ) { ("Echoing: " + str);
try { out.println(str);
ServerSocket s = new ServerSocket(port); out.flush(); // Ne pas oublier!
System.out.println("Serv Started: " + s); }
// Blocks until a connection occurs: System.out.println("closing...");
Socket socket = s.accept(); socket.close();
System.out.println( } catch(Exception e) {
"Connect. accepted, socket: "+ socket); e.printStackTrace();
BufferedReader in = }
new BufferedReader( }
new InputStreamReader( }
socket.getInputStream()));
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 18
- 19. java.net
Exemple de process serveur
/** un serveur tres simple qui renvoie ce PrintWriter out =
* qu’il reçoit : serveur miroir new PrintWriter(
*/ new OutputStreamWriter(
import java.io.*; socket.getOutputStream()));
sinon le buffer
sinon le buffer
import java.net.*; while (true) {n’est pas écrit
public class ServerMiroir { Pas d’@ IP : n’est pas écrit
String str = in.readLine();
Pas d’@ IP : sur le réseau
sur le réseau
// Choisir un no de port entre 1-1024exécuté sur
exécuté sur if (str.equals("END")) break;
tant qu’il n’est
static final int port = 8080; la machine tant qu’il n’est
System.out.println plein
la machine pas plein
pas
public static void main(String[] argscourante
) { ("Echoing: " + str);
courante
try { out.println(str);
Représente
Représente s = new ServerSocket(port);
ServerSocket out.flush(); // Ne pas oublier!
la connection
la System.out.println("Serv Started: " + s);
connection }
// Blocks until a connection occurs: System.out.println("closing...");
Socket socket = s.accept(); socket.close();
System.out.println( } catch(Exception e) {
"socket: "+ socket); e.printStackTrace();
BufferedReader in = }
new BufferedReader(
appel automatique à toString()
}appel automatique à toString()
new InputStreamReader( } socket: [addr=207.0.0.1,
socket: [addr=207.0.0.1,
socket.getInputStream())); port=1077, localport=8080]
port=1077, localport=8080]
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 19
- 20. java.net
Exemple de process Client
/** Un client tres simple qui envoie n DataInputStream in =
* lignes au serveur et lit n ligne new DataInputStream(
*/ new BufferedInputStream(
import java.io.*; socket.getInputStream()));
import java.net.*; PrintStream out =
public class ClientMiroir { new PrintStream(
static final int port = 8080; new BufferedOutputStream(
public static void main(String args[]) { socket.getOutputStream()));
try { for(int i = 0; i < 10; i ++) {
// Passing null to getByName() produces the out.println("howdy " + i);
// special "Local Loopback" IP address, for out.flush(); // Ne pas oublier
// testing on one machine w/o a network: String str = in.readLine();
InetAddress addr = System.out.println(str);
InetAddress.getByName(null); }
// On aurait pu utiliser l’adresse ou out.println("END");
// le nom de façon équivalente out.flush(); // Ne pas oublier!
// InetAddress.getByName("127.0.0.1"); socket.close();
// InetAddress.getByName("localhost"); } catch(Exception e) {
System.out.println("addr = " + addr); e.printStackTrace(); }
Socket socket = new Socket(addr, port); }
System.out.println("socket = " + socket); }
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 20
- 21. java.net
Gestion de plusieurs clients pour le serveur
import java.io.*; import java.net.*; public class MultiServerMiroir {
class ServerMiroir extends Thread { private static final int port = 8080;
Socket socket;
public static void main(String[] args )
private BufferedReader in;
{
private PrintWriter out;
try {
ServerMiroir (Socket s) {
socket = s; ServerSocket s = new
try { in = new BufferedReader( new ...); ServerSocket(port);
out = new PrintWriter( new...); System.out.println("Serv. Started");
} catch(IOException e) {...} while(true) {
start(); // Calls run() // Bloque jusqu’a connexion
} Socket socket = s.accept();
public void run() { new ServerMiroir(socket);
try { }
while (true) { //lire s = in.readLine}
} catch(Exception e) {
System.out.println("closing...");
e.printStackTrace();
in.close(); out.close();
}
socket.close();
} catch (IOException e) { ... } }
} }
}
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 21
- 22. java.net
Datagram- Buffered stream- et Data Stream- sockets
Datagram Buf.Stream DataStream CORBA
fiabilité de la communication Non Oui Oui Oui
Paramètres typés Non Non Oui Oui
performances très bonne bonne mauvaise bonne
1,8 ms 2 ms 301 ms 3,2 ms
Sécurité Oui Oui Oui Oui
Desciptions d’Interface Non Non Non Oui
Les sockets fournissent un moyen de bas niveau pour
la programmation réseau
La programmation d’une appli. Client/Serveur doit y
plutôt s’appuyer sur CORBA IIOP et Java RMI
© Rémy Courdier 1996-2009 - Java Réseau - Version du cours 3.0 22