L'interaction avec le réseau Korteby Farouk Cours Java Avancée
Sommaire Le package java.net et les API réseau de Java  Les Sockets Java Les sockets en mode connecté Un serveur TCP/IP Un client TCP/IP Les échanges de données Les classes de connexion
Le package java.net et les API réseau de Java Korteby Farouk Cours Java Avancée
Le package java.net et les API réseau Java Ce package fournit un ensemble de classes pour communiquer sur le réseau Internet (et Intranet), télécharger des URL et définir de nouveaux protocoles Il permet notamment de créer et d'accéder à : des connexions  URL  (Web) des connexions Stream socket ( TCP ) des connexions Datagram sockets ( UDP ) des connexions Multicast sockets
Le package java.net et les API réseau Java 2 packages :  java.net  et  javax.net Socket TCP : -  Socket ,  ServerSocket -  JSSE  (Java Secure Socket Layer) Sockets UDP : -  DatagramSocket ,  DatagramPacket Sockets MultiCast : -  MulticastSocket ,  DatagramPacket
Le package java.net et les API réseau Java Adresses IP -  InetAddress Classes réseau niveau application (couche 7) -  URL, URI, URLConnection, -  HttpURLConnection, JarURLConnection
Le package java.net et les API réseau Java Une bonne partie de ces classes ne sont que très rarement utilisées par les applications Les classes les plus utilisées : -  URL  : un URL Internet (puissante et simple) -  Socket  et  ServerSocket  : connexions TCP/IP -  DatagramPacket  et  DatagramServer  : connexions UDP
Le package java.net et les API réseau Java La classe java.net.InetAddress: Représente une adresse IP - Utilisée par les classes Socket et DatagramSocket 3 méthodes statiques pour la résolution DNS : public static InetAddress  getByName (String hostname) throws UnknownHostException public static InetAddress[]  getByName (String hostname) throws UnknownHostException - Donne l(es) adresse(s) de l'hôte dont le DN est passé en paramêtre public static InetAddress  getLocalHost () throws UnknownHostException - Donne l'adresse de l'hôte local
Le package java.net et les API réseau Java Exemple : InetAddress server; try { if(args.length > 0) { server = InetAddress. getByName (args[0]); } else { server = InetAddress. getLocalHost (); } System.out.println(server); // le nom du serveur } catch( UnknownHostException  e) {}
Les Sockets Java Korteby Farouk Cours Java Avancée
Les Sockets Java Korteby Farouk Cours Java Avancée 1. Les sockets en mode connecté
Les Sockets Java Qu'est ce qu'un socket ? Point d'entrée entre 2 applications du réseau Permet l'échange de données entre elles à l'aide des mécanismes d'entrées / sorties classiques (java.io)
Les Sockets Java Différents types de sockets : -  Stream Sockets  (TCP) Pour établir une communication en  mode connecté Si connexion interrompue, les applications sont informées -  Datagram Sockets  (UDP) Communication en  mode non connecté  (Datagramme) Données envoyées sous forme de paquets indépendants de toute connexion. Plus rapide mais moins fiable -  Raw Sockets Accès aux couches basses (très bas niveau). Non implémentées en Java
Les Sockets Java Des exemples d'applications Applications TCP les plus connues - FTP, SMTP, TELNET, etc. Applications UDP les plus connues : - Simple Network Management Protocol (SNMP) - Trivial File Transfert Protocol (TFTP) Les Raw Sockets permettent d'accéder à ICMP (Internet Control Message Protocol)
Les Sockets Java Représente une connexion  fiable  TCP/IP entre 2 processus (qui peuvent être des JVM !) - La connexion est fiable (contrôle d'erreur, …) - Et 2 flots de données sont établis entre les 2 machines La connexion est asymétrique : - Une machine est  serveur  : classe  ServerSocket Elle attend les demandes de connexion et les accepte - Une machine est  cliente  : classe  Socket Elle demande l'établissement de la connexion avec le serveur
Les Sockets Java Le modèle client-serveur
Les Sockets Java Principe de fonctionnement 1. Le serveur enregistre son service sous un numéro de port indiquant le nombre de clients qu'il accepte de faire buffériser à un instant t ( new ServerSocket(…)  ) 2. Il se met en attente d'une connexion (méthode  accept()  de son instance  ServerSocket ) 3. Le client peut alors établir une connexion en demandant la création d'un Socket ( new Socket())  à destination du serveur pour le port sur lequel le service a été enregistré.
Les Sockets Java 4. Le serveur sort de son  accept()  et récupère un Socket de communication avec le client 5. Ils peuvent alors utiliser des  InputStream  et  OutputStream  pour échanger des données
Les Sockets Java Korteby Farouk Cours Java Avancée 2. Un serveur TCP/IP
2. Un serveur TCP/IP - Utiliser la classe  java.net.ServerSocket - Quand un client se connecte à un port sur lequel un  ServerSocket  écoute,  ServerSocket  crée une nouvelle instance de la classe  Socket  pour supporter les communications côté serveur public static final int PORT = …; ServerSocket server = new  ServerSocket (PORT); Socket connection = server .accept ();
2. Un serveur TCP/IP - Les constructeurs et la plupart des méthodes peuvent générer une  IOException - La méthode  accept()  est dite bloquante ce qui implique un type de programmation particulier : boucle infinie qui se termine seulement si une erreur grave se produit …
2. Un serveur TCP/IP java.net.ServerSocket final int PORT = …; try{ ServerSocket  server = new  ServerSocket (PORT, 5); while(true){ Socket socket =  server.accept()  ; … } } catch( IOException  e) {…} //Les sockets en mode connecté
Les Sockets Java Korteby Farouk Cours Java Avancée 3. Un client TCP/IP
3. Un client TCP/IP - Le client se connecte au serveur en créant une instance de la classe  java.net.Socket  : connexion synchrone public static final String HOST = …; public static final int PORT = …; Socket  connection =  new Socket (HOST, PORT); - Le socket permet de supporter les communications côté client - Les constructeurs et la plupart des méthodes peuvent générer une  IOException
3. Un client TCP/IP Le serveur doit être démarré avant le client. Dans le cas contraire, si le client se connecte à un serveur inexistant, une exception sera levée après un  time-out . La méthode  close()  ferme (détruit) le socket, côté client comme côté serveur
3. Un client TCP/IP java.net.Socket Les sockets en mode connecté final String HOST = "…"; final int PORT = …; Socket s = null; try{ s = new  Socket (HOST, PORT); … } catch(IOException e) {…} finally { try{ s.close()  ;} catch(IOException e){} }
3. Un client TCP/IP Remarques lors du déroulement de l'exécution Le serveur : - Après la fermeture de la connexion, il se met en attente d'une nouvelle connexion du même client ou d'un autre Si plusieurs demandes de connexions arrivent simultanément, une seule est acceptée et les autres sont mises en attente jusqu'au  accept()  suivant (modulo les  time-out ) ⇒  pour accepter et traiter plusieurs connexions simultanées, la solution est de  multithreader  le serveur
3. Un client TCP/IP Le protocole d'échange des données - Le client et le serveur doivent respecter un protocole utilisateur d'échange des données VALIDE. - Exemples de problèmes possibles : -Le client envoie un entier mais le serveur attend un flottant -Le client attend des données du serveur qui lui-même attend des données du client : interblocage ( deadlock ) - Attention à l'hétérogénéité des plates-formes client et serveur
Les Sockets Java Korteby Farouk Cours Java Avancée 4. Les échanges de données
4. Les échanges de données 2 types d'échanges possibles : - Échange en mode ligne - Échange en mode BLOC de bytes
4. Les échanges de données Échange en mode Ligne: - Les requêtes et les réponses sont constituées d'une ou plusieurs lignes de texte (ASCII 7 bits,UTF-8, UniCode, ASN1, …) Exemples de protocole en mode Ligne : HTTP, FTP,SMTP - En Java : Utilisation des classes Java d'entrées/sorties java.io.* -  java.io.BufferedReader -  java.io.BufferedWriter
4. Les échanges de données Attention : - Les terminateurs de ligne varient selon les OS : -Tantôt LF '\n', tantôt CR '\r', tantôt CRLF "\r\n", … - L'encodage n'est pas supporté par tous les langages - Certains protocoles (HTTP, SMTP, etc) limitent la longueur des lignes
4. Les échanges de données - Une fois la connexion établie, il faut obtenir les  streams  d'entrées et de sorties ( java.io ) auprès de l'instance de la classe  Socket  en cours - Flux entrant : InputStream in = socket. getInputStream (); InputStreamReader reader = new InputStreamReader(in); BufferedReader istream = new BufferedReader(reader); String line = istream.readLine();
4. Les échanges de données Déroulement : Obtention d'un  stream  simple : définit les opérations de base 2. Création d'un  stream  convertissant les 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 chaîne de caractères
4. Les échanges de données Flux sortant : OutputStream out = socket. getOutputStream (); PrintWriter ostream = new PrintWriter(out); ostream. println (str); ostream. flush (); 1. Obtention du flux de données sortantes : bytes 2. Création d'un  stream  pour convertir les bytes en chaînes de caractères 3. Envoi d'une ligne de caractères 4. Envoi effectif sur le réseau des bytes (important).
4. Les échanges de données exemple du client:s Socket s = null; s = new Socket(HOST, PORT); // lecture du flux d'entrée en provenance du serveur InputStream in = s. getInputStream (); InputStreamReader reader = new InputStreamReader(in); BufferedReader istream = new BufferedReader(reader); String line = istream. readLine (); // Echo la ligne lue vers le serveur PrintWriter ostream =new PrintWriter(s. getOutputStream ()); ostream. println (line); ostream. flush ();
4. Les échanges de données Échange en mode Bloc de bytes - Les requêtes et les réponses sont des blocs de bytes d'une taille et d'un format connus de l'autre Exemples : RPC, RMI, CORBA, LDAP, … Le bloc peut avoir un entête qui contient un code d'opération et la longueur du corps du bloc qui contient les données - En Java : Utilisation possible des classes -  java.io.DataInputStream -  java.io.DataOutputStream Mais impose que le client et le serveur soient des JVM
4. Les échanges de données Les exceptions -  java.net.BindException Erreur de liaison à une adresse locale (le port est peut être déjà lié) -  java.net.ConnectException Refus de connexion par l'hôte (pas de process qui écoute le port, etc.) -  java.net.NoRouteToHostException Le hôte n'est pas joignable
4. Les échanges de données - java.net.ProtocolException Erreur du protocole (TCP, etc.) -  java.net.SocketException Erreur du protocole (TCP, etc.) -  java.net.UnknownHostException Erreur de DNS
Les classes de connexion Korteby Farouk Cours Java Avancée
Les classes de connexion - java.net.URL - java.net.URLConnection
Les classes de connexion Rappels - URL :  U niform  R esource  L ocator - Une URL est une chaîne de caractères qui permet de localiser de manière unique une ressource sur le réseau Internet - Elle identifie à la fois : -Le protocole à utiliser pour charger la ressource (ftp, file,http, etc) -La machine hôte : adresse IP + numéro de port(optionnel) -Le chemin d'accès à la ressource (arborescence) -Le nom de la ressource
Les classes de connexion java.net.URL - Permet le téléchargement des informations référencées par une URL Contient des méthodes pour créer/ouvrir des pages Web - Constructeurs : URL url1= new URL("/users/itey/pages/cours/index.html"); URL url2= new URL("http://www.inria.fr/"); URL url3= new URL(url2, "semir/itey/index.html"); URL url4= new URL(url3, "#BOTTOM"); URL url5= new URL("http", "www.inria.fr", "/itey/cv.html"); - Peuvent lever une MalformedURLException
Les classes de connexion Méthodes : -  String getProtocol(), String getHost() -  String getPort(), String getRef() -  InputStream openStream() Obtenir un InputStream d'une connexion au serveur -  URLConnection openConnection() Obtenir un URLConnection
Les classes de connexion - Exemple d'utilisation des méthodes getXxx() URL aURL = new URL("http://java.sun.com:80/docs/books/" +"tutorial/index.html#DOWNLOADING"); System.out.println("Protocol = " + aURL. getProtocol ()); System.out.println("Host = " + aURL. getHost ()); System.out.println("Filename = " + aURL. getFile ()); System.out.println("Port = " + aURL. getPort ()); System.out.println("Ref = " + aURL. getRef ());
Les classes de connexion - Exemple de récupération d'un document : URL aURL = new URL(args[0]); BufferedReader in = new BufferedReader( new InputStreamReader(aURL. openStream ())); String inputLine; while((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close();
Les classes de connexion Utilitaires - Chemin relatif : La classe  java.net.URI  offre des méthodes pour la construction d'URL "relative" - Encoder/Decoder : Méthodes statiques de conversion : x-www-form-urlencoded  vers/depuis  String static String URLDecoder.decode(String urlencoded) Static String URLEncoder.encode(String str)
Les classes de connexion java.net.URLEncoder - Convertit une chaîne de caractères String en un format portable : xxx-www-form-urlencoded -Les caractères ASCII '('a'-'z', 'A'-'Z','0'-'9') restent non modifiés -L'espace est converti en '+' -Tous les autres sont convertis en "%xy" où xy est la représentation hexadécimale des 16 bits de poids faible du caractère
Les classes de connexion java.net.URLConnection - Définit une connexion à une URL Offre un meilleur contrôle sur le téléchargement d'informations référencées par une URL Super-classe abstraite indépendante du schéma de connexion -http, ftp, file, mailto, … - Ses sous-classes : HttpURLConnection JarURLConnection
Les classes de connexion Utilisation : 1. L'instance est récupérée de  openConnection() 2. Configuration des paramètres de la connexion   setAllowUserInteraction,   setDoInput, setDoOutput   setIfModifiedSince, setUsesCaches,  … 3. Connexion  connect()  et obtention d'un  InputStream 4. Récupération des champs d'entête ( header fields ) getContent, getHeaderField, getContentEncoding getContentType, getDate, getExpiration, getLastModified
Les classes de connexion Exemple de récupération d'un document URL aURL = new URL(args[0]); URLConnection aURLc = aURL. openConnection (); BufferedReader in = new BufferedReader( new InputStreamReader(aURLc. getInputStream ())); String inputLine; while((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close();
Les classes de connexion Exemple d'envoi de mail : public static void main(String[] args) throws Exception { URL mailto = new URL("mailto:" + args[0]); URLConnection mailtocnx = mailto. openConnection (); mailtocnx. connect (); PrintStream p = new PrintStream(mailtocnx. getOutputStream ()); p.println("Subject: Test\r\n\r\nSalut!"); p.close();
Les classes de connexion java.net.HttpURLConnection Sous interface de URLConnection -Récupération d'un document via une connexion    HTTP Méthodes : -Positionnement des champs de la requête HTTP setRequestMethod() -Récupération des champs de la réponse HTTP getResponseCode(), getResponseMessage() - Clôture de la session HTTP disconnect()  pour les connexions keep-alive
Les classes de connexion Exemple de récupération d'un document URL hurl = new URL(args[0]); HttpURLConnection hcnx = (HttpURLConnection) hurl. openConnection (); if(hcnx. getResponseCode () ==  HttpURLConnection.HTTP_OK ){ BufferedReader in = new BufferedReader( new InputStreamReader(hcnx. getInputStream ())); String inputLine; while((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); }else{System.err.println(hcnx. getResponseMessage ());}
Les classes de connexion java.net.JarURLConnection - Sous interface de URLConnection Récupération d'un fichier JAR ou d'une de ses entrées - Syntaxe de l'URL : jar:<url>!/{entry} !/ est un séparateur - Un JAR File : jar:http://www.foo.com/bar/baz.jar!/ - Un JAR File : jar:file:/local/dev/baz.jar!/ - Un rép. : jar:http://www.foo.com/bar/baz.jar!/COM/foo/ -Une entrée : jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
Les classes de connexion Exemple : URL url = new URL(&quot;jar:http://www.foo.com/bar/baz.jar!/&quot;); JarURLConnection jar = (JarURLConnection)url.openConnection(); Manifest manifest = jar. getManifest ();
Ateliers Korteby Farouk Cours Java Avancée
Ateliers TP1:- Client Serveur Chaîne – application client serveur qui communique une chaîne de caractère. 2 classes ServeurChaine et ClientChaine dans 2 fichiers *.java
Ateliers Serveur:  lance une boucle infinie d’attente pour attendre les demandes de connexions des clients. Si la demande est accepte ,la tache rentre dans une boucle chargée de la communication avec un sel client.
Ateliers Client: La partie cliente effectue une demande de connexion par la creation d’un nouvel objet Socket dans la tache initiale. Les parametres utilises sont l’adresse du serveur et le numero de port
Ateliers
Merci de votre Attention By Korteby Farouk Cours Java Avancée

Le Réseau et Java

  • 1.
    L'interaction avec leréseau Korteby Farouk Cours Java Avancée
  • 2.
    Sommaire Le packagejava.net et les API réseau de Java Les Sockets Java Les sockets en mode connecté Un serveur TCP/IP Un client TCP/IP Les échanges de données Les classes de connexion
  • 3.
    Le package java.netet les API réseau de Java Korteby Farouk Cours Java Avancée
  • 4.
    Le package java.netet les API réseau Java Ce package fournit un ensemble de classes pour communiquer sur le réseau Internet (et Intranet), télécharger des URL et définir de nouveaux protocoles Il permet notamment de créer et d'accéder à : des connexions URL (Web) des connexions Stream socket ( TCP ) des connexions Datagram sockets ( UDP ) des connexions Multicast sockets
  • 5.
    Le package java.netet les API réseau Java 2 packages : java.net et javax.net Socket TCP : - Socket , ServerSocket - JSSE (Java Secure Socket Layer) Sockets UDP : - DatagramSocket , DatagramPacket Sockets MultiCast : - MulticastSocket , DatagramPacket
  • 6.
    Le package java.netet les API réseau Java Adresses IP - InetAddress Classes réseau niveau application (couche 7) - URL, URI, URLConnection, - HttpURLConnection, JarURLConnection
  • 7.
    Le package java.netet les API réseau Java Une bonne partie de ces classes ne sont que très rarement utilisées par les applications Les classes les plus utilisées : - URL : un URL Internet (puissante et simple) - Socket et ServerSocket : connexions TCP/IP - DatagramPacket et DatagramServer : connexions UDP
  • 8.
    Le package java.netet les API réseau Java La classe java.net.InetAddress: Représente une adresse IP - Utilisée par les classes Socket et DatagramSocket 3 méthodes statiques pour la résolution DNS : public static InetAddress getByName (String hostname) throws UnknownHostException public static InetAddress[] getByName (String hostname) throws UnknownHostException - Donne l(es) adresse(s) de l'hôte dont le DN est passé en paramêtre public static InetAddress getLocalHost () throws UnknownHostException - Donne l'adresse de l'hôte local
  • 9.
    Le package java.netet les API réseau Java Exemple : InetAddress server; try { if(args.length > 0) { server = InetAddress. getByName (args[0]); } else { server = InetAddress. getLocalHost (); } System.out.println(server); // le nom du serveur } catch( UnknownHostException e) {}
  • 10.
    Les Sockets JavaKorteby Farouk Cours Java Avancée
  • 11.
    Les Sockets JavaKorteby Farouk Cours Java Avancée 1. Les sockets en mode connecté
  • 12.
    Les Sockets JavaQu'est ce qu'un socket ? Point d'entrée entre 2 applications du réseau Permet l'échange de données entre elles à l'aide des mécanismes d'entrées / sorties classiques (java.io)
  • 13.
    Les Sockets JavaDifférents types de sockets : - Stream Sockets (TCP) Pour établir une communication en mode connecté Si connexion interrompue, les applications sont informées - Datagram Sockets (UDP) Communication en mode non connecté (Datagramme) Données envoyées sous forme de paquets indépendants de toute connexion. Plus rapide mais moins fiable - Raw Sockets Accès aux couches basses (très bas niveau). Non implémentées en Java
  • 14.
    Les Sockets JavaDes exemples d'applications Applications TCP les plus connues - FTP, SMTP, TELNET, etc. Applications UDP les plus connues : - Simple Network Management Protocol (SNMP) - Trivial File Transfert Protocol (TFTP) Les Raw Sockets permettent d'accéder à ICMP (Internet Control Message Protocol)
  • 15.
    Les Sockets JavaReprésente une connexion fiable TCP/IP entre 2 processus (qui peuvent être des JVM !) - La connexion est fiable (contrôle d'erreur, …) - Et 2 flots de données sont établis entre les 2 machines La connexion est asymétrique : - Une machine est serveur : classe ServerSocket Elle attend les demandes de connexion et les accepte - Une machine est cliente : classe Socket Elle demande l'établissement de la connexion avec le serveur
  • 16.
    Les Sockets JavaLe modèle client-serveur
  • 17.
    Les Sockets JavaPrincipe de fonctionnement 1. Le serveur enregistre son service sous un numéro de port indiquant le nombre de clients qu'il accepte de faire buffériser à un instant t ( new ServerSocket(…) ) 2. Il se met en attente d'une connexion (méthode accept() de son instance ServerSocket ) 3. Le client peut alors établir une connexion en demandant la création d'un Socket ( new Socket()) à destination du serveur pour le port sur lequel le service a été enregistré.
  • 18.
    Les Sockets Java4. Le serveur sort de son accept() et récupère un Socket de communication avec le client 5. Ils peuvent alors utiliser des InputStream et OutputStream pour échanger des données
  • 19.
    Les Sockets JavaKorteby Farouk Cours Java Avancée 2. Un serveur TCP/IP
  • 20.
    2. Un serveurTCP/IP - Utiliser la classe java.net.ServerSocket - Quand un client se connecte à un port sur lequel un ServerSocket écoute, ServerSocket crée une nouvelle instance de la classe Socket pour supporter les communications côté serveur public static final int PORT = …; ServerSocket server = new ServerSocket (PORT); Socket connection = server .accept ();
  • 21.
    2. Un serveurTCP/IP - Les constructeurs et la plupart des méthodes peuvent générer une IOException - La méthode accept() est dite bloquante ce qui implique un type de programmation particulier : boucle infinie qui se termine seulement si une erreur grave se produit …
  • 22.
    2. Un serveurTCP/IP java.net.ServerSocket final int PORT = …; try{ ServerSocket server = new ServerSocket (PORT, 5); while(true){ Socket socket = server.accept() ; … } } catch( IOException e) {…} //Les sockets en mode connecté
  • 23.
    Les Sockets JavaKorteby Farouk Cours Java Avancée 3. Un client TCP/IP
  • 24.
    3. Un clientTCP/IP - Le client se connecte au serveur en créant une instance de la classe java.net.Socket : connexion synchrone public static final String HOST = …; public static final int PORT = …; Socket connection = new Socket (HOST, PORT); - Le socket permet de supporter les communications côté client - Les constructeurs et la plupart des méthodes peuvent générer une IOException
  • 25.
    3. Un clientTCP/IP Le serveur doit être démarré avant le client. Dans le cas contraire, si le client se connecte à un serveur inexistant, une exception sera levée après un time-out . La méthode close() ferme (détruit) le socket, côté client comme côté serveur
  • 26.
    3. Un clientTCP/IP java.net.Socket Les sockets en mode connecté final String HOST = &quot;…&quot;; final int PORT = …; Socket s = null; try{ s = new Socket (HOST, PORT); … } catch(IOException e) {…} finally { try{ s.close() ;} catch(IOException e){} }
  • 27.
    3. Un clientTCP/IP Remarques lors du déroulement de l'exécution Le serveur : - Après la fermeture de la connexion, il se met en attente d'une nouvelle connexion du même client ou d'un autre Si plusieurs demandes de connexions arrivent simultanément, une seule est acceptée et les autres sont mises en attente jusqu'au accept() suivant (modulo les time-out ) ⇒ pour accepter et traiter plusieurs connexions simultanées, la solution est de multithreader le serveur
  • 28.
    3. Un clientTCP/IP Le protocole d'échange des données - Le client et le serveur doivent respecter un protocole utilisateur d'échange des données VALIDE. - Exemples de problèmes possibles : -Le client envoie un entier mais le serveur attend un flottant -Le client attend des données du serveur qui lui-même attend des données du client : interblocage ( deadlock ) - Attention à l'hétérogénéité des plates-formes client et serveur
  • 29.
    Les Sockets JavaKorteby Farouk Cours Java Avancée 4. Les échanges de données
  • 30.
    4. Les échangesde données 2 types d'échanges possibles : - Échange en mode ligne - Échange en mode BLOC de bytes
  • 31.
    4. Les échangesde données Échange en mode Ligne: - Les requêtes et les réponses sont constituées d'une ou plusieurs lignes de texte (ASCII 7 bits,UTF-8, UniCode, ASN1, …) Exemples de protocole en mode Ligne : HTTP, FTP,SMTP - En Java : Utilisation des classes Java d'entrées/sorties java.io.* - java.io.BufferedReader - java.io.BufferedWriter
  • 32.
    4. Les échangesde données Attention : - Les terminateurs de ligne varient selon les OS : -Tantôt LF '\n', tantôt CR '\r', tantôt CRLF &quot;\r\n&quot;, … - L'encodage n'est pas supporté par tous les langages - Certains protocoles (HTTP, SMTP, etc) limitent la longueur des lignes
  • 33.
    4. Les échangesde données - Une fois la connexion établie, il faut obtenir les streams d'entrées et de sorties ( java.io ) auprès de l'instance de la classe Socket en cours - Flux entrant : InputStream in = socket. getInputStream (); InputStreamReader reader = new InputStreamReader(in); BufferedReader istream = new BufferedReader(reader); String line = istream.readLine();
  • 34.
    4. Les échangesde données Déroulement : Obtention d'un stream simple : définit les opérations de base 2. Création d'un stream convertissant les 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 chaîne de caractères
  • 35.
    4. Les échangesde données Flux sortant : OutputStream out = socket. getOutputStream (); PrintWriter ostream = new PrintWriter(out); ostream. println (str); ostream. flush (); 1. Obtention du flux de données sortantes : bytes 2. Création d'un stream pour convertir les bytes en chaînes de caractères 3. Envoi d'une ligne de caractères 4. Envoi effectif sur le réseau des bytes (important).
  • 36.
    4. Les échangesde données exemple du client:s Socket s = null; s = new Socket(HOST, PORT); // lecture du flux d'entrée en provenance du serveur InputStream in = s. getInputStream (); InputStreamReader reader = new InputStreamReader(in); BufferedReader istream = new BufferedReader(reader); String line = istream. readLine (); // Echo la ligne lue vers le serveur PrintWriter ostream =new PrintWriter(s. getOutputStream ()); ostream. println (line); ostream. flush ();
  • 37.
    4. Les échangesde données Échange en mode Bloc de bytes - Les requêtes et les réponses sont des blocs de bytes d'une taille et d'un format connus de l'autre Exemples : RPC, RMI, CORBA, LDAP, … Le bloc peut avoir un entête qui contient un code d'opération et la longueur du corps du bloc qui contient les données - En Java : Utilisation possible des classes - java.io.DataInputStream - java.io.DataOutputStream Mais impose que le client et le serveur soient des JVM
  • 38.
    4. Les échangesde données Les exceptions - java.net.BindException Erreur de liaison à une adresse locale (le port est peut être déjà lié) - java.net.ConnectException Refus de connexion par l'hôte (pas de process qui écoute le port, etc.) - java.net.NoRouteToHostException Le hôte n'est pas joignable
  • 39.
    4. Les échangesde données - java.net.ProtocolException Erreur du protocole (TCP, etc.) - java.net.SocketException Erreur du protocole (TCP, etc.) - java.net.UnknownHostException Erreur de DNS
  • 40.
    Les classes deconnexion Korteby Farouk Cours Java Avancée
  • 41.
    Les classes deconnexion - java.net.URL - java.net.URLConnection
  • 42.
    Les classes deconnexion Rappels - URL : U niform R esource L ocator - Une URL est une chaîne de caractères qui permet de localiser de manière unique une ressource sur le réseau Internet - Elle identifie à la fois : -Le protocole à utiliser pour charger la ressource (ftp, file,http, etc) -La machine hôte : adresse IP + numéro de port(optionnel) -Le chemin d'accès à la ressource (arborescence) -Le nom de la ressource
  • 43.
    Les classes deconnexion java.net.URL - Permet le téléchargement des informations référencées par une URL Contient des méthodes pour créer/ouvrir des pages Web - Constructeurs : URL url1= new URL(&quot;/users/itey/pages/cours/index.html&quot;); URL url2= new URL(&quot;http://www.inria.fr/&quot;); URL url3= new URL(url2, &quot;semir/itey/index.html&quot;); URL url4= new URL(url3, &quot;#BOTTOM&quot;); URL url5= new URL(&quot;http&quot;, &quot;www.inria.fr&quot;, &quot;/itey/cv.html&quot;); - Peuvent lever une MalformedURLException
  • 44.
    Les classes deconnexion Méthodes : - String getProtocol(), String getHost() - String getPort(), String getRef() - InputStream openStream() Obtenir un InputStream d'une connexion au serveur - URLConnection openConnection() Obtenir un URLConnection
  • 45.
    Les classes deconnexion - Exemple d'utilisation des méthodes getXxx() URL aURL = new URL(&quot;http://java.sun.com:80/docs/books/&quot; +&quot;tutorial/index.html#DOWNLOADING&quot;); System.out.println(&quot;Protocol = &quot; + aURL. getProtocol ()); System.out.println(&quot;Host = &quot; + aURL. getHost ()); System.out.println(&quot;Filename = &quot; + aURL. getFile ()); System.out.println(&quot;Port = &quot; + aURL. getPort ()); System.out.println(&quot;Ref = &quot; + aURL. getRef ());
  • 46.
    Les classes deconnexion - Exemple de récupération d'un document : URL aURL = new URL(args[0]); BufferedReader in = new BufferedReader( new InputStreamReader(aURL. openStream ())); String inputLine; while((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close();
  • 47.
    Les classes deconnexion Utilitaires - Chemin relatif : La classe java.net.URI offre des méthodes pour la construction d'URL &quot;relative&quot; - Encoder/Decoder : Méthodes statiques de conversion : x-www-form-urlencoded vers/depuis String static String URLDecoder.decode(String urlencoded) Static String URLEncoder.encode(String str)
  • 48.
    Les classes deconnexion java.net.URLEncoder - Convertit une chaîne de caractères String en un format portable : xxx-www-form-urlencoded -Les caractères ASCII '('a'-'z', 'A'-'Z','0'-'9') restent non modifiés -L'espace est converti en '+' -Tous les autres sont convertis en &quot;%xy&quot; où xy est la représentation hexadécimale des 16 bits de poids faible du caractère
  • 49.
    Les classes deconnexion java.net.URLConnection - Définit une connexion à une URL Offre un meilleur contrôle sur le téléchargement d'informations référencées par une URL Super-classe abstraite indépendante du schéma de connexion -http, ftp, file, mailto, … - Ses sous-classes : HttpURLConnection JarURLConnection
  • 50.
    Les classes deconnexion Utilisation : 1. L'instance est récupérée de openConnection() 2. Configuration des paramètres de la connexion setAllowUserInteraction, setDoInput, setDoOutput setIfModifiedSince, setUsesCaches, … 3. Connexion connect() et obtention d'un InputStream 4. Récupération des champs d'entête ( header fields ) getContent, getHeaderField, getContentEncoding getContentType, getDate, getExpiration, getLastModified
  • 51.
    Les classes deconnexion Exemple de récupération d'un document URL aURL = new URL(args[0]); URLConnection aURLc = aURL. openConnection (); BufferedReader in = new BufferedReader( new InputStreamReader(aURLc. getInputStream ())); String inputLine; while((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close();
  • 52.
    Les classes deconnexion Exemple d'envoi de mail : public static void main(String[] args) throws Exception { URL mailto = new URL(&quot;mailto:&quot; + args[0]); URLConnection mailtocnx = mailto. openConnection (); mailtocnx. connect (); PrintStream p = new PrintStream(mailtocnx. getOutputStream ()); p.println(&quot;Subject: Test\r\n\r\nSalut!&quot;); p.close();
  • 53.
    Les classes deconnexion java.net.HttpURLConnection Sous interface de URLConnection -Récupération d'un document via une connexion HTTP Méthodes : -Positionnement des champs de la requête HTTP setRequestMethod() -Récupération des champs de la réponse HTTP getResponseCode(), getResponseMessage() - Clôture de la session HTTP disconnect() pour les connexions keep-alive
  • 54.
    Les classes deconnexion Exemple de récupération d'un document URL hurl = new URL(args[0]); HttpURLConnection hcnx = (HttpURLConnection) hurl. openConnection (); if(hcnx. getResponseCode () == HttpURLConnection.HTTP_OK ){ BufferedReader in = new BufferedReader( new InputStreamReader(hcnx. getInputStream ())); String inputLine; while((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); }else{System.err.println(hcnx. getResponseMessage ());}
  • 55.
    Les classes deconnexion java.net.JarURLConnection - Sous interface de URLConnection Récupération d'un fichier JAR ou d'une de ses entrées - Syntaxe de l'URL : jar:<url>!/{entry} !/ est un séparateur - Un JAR File : jar:http://www.foo.com/bar/baz.jar!/ - Un JAR File : jar:file:/local/dev/baz.jar!/ - Un rép. : jar:http://www.foo.com/bar/baz.jar!/COM/foo/ -Une entrée : jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
  • 56.
    Les classes deconnexion Exemple : URL url = new URL(&quot;jar:http://www.foo.com/bar/baz.jar!/&quot;); JarURLConnection jar = (JarURLConnection)url.openConnection(); Manifest manifest = jar. getManifest ();
  • 57.
    Ateliers Korteby FaroukCours Java Avancée
  • 58.
    Ateliers TP1:- ClientServeur Chaîne – application client serveur qui communique une chaîne de caractère. 2 classes ServeurChaine et ClientChaine dans 2 fichiers *.java
  • 59.
    Ateliers Serveur: lance une boucle infinie d’attente pour attendre les demandes de connexions des clients. Si la demande est accepte ,la tache rentre dans une boucle chargée de la communication avec un sel client.
  • 60.
    Ateliers Client: Lapartie cliente effectue une demande de connexion par la creation d’un nouvel objet Socket dans la tache initiale. Les parametres utilises sont l’adresse du serveur et le numero de port
  • 61.
  • 62.
    Merci de votreAttention By Korteby Farouk Cours Java Avancée