Your SlideShare is downloading. ×
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Chap7 java net
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Chap7 java net

763

Published on

csf

csf

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
763
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 dinterface de programmation permet aux programmes dʼéchanger des données Les application ne voient les couches de communication quʼà travers lʼAPI socket (abstraction) nimplique 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) ladresse 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 lIANA (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 serveurimport 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

×