Le Réseau et Java

2 484 vues

Publié le

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

Publié dans : Technologie
1 commentaire
2 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
2 484
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
191
Commentaires
1
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Le Réseau et Java

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

×