Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Master 1 SIGLIS Ingénierie des réseaux Stéphane Tallard Chapitre 2 bis – Les sockets en Java Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Rappel : les sockets Les processus reçoivent /envoient des messages à travers la couche réseau La socket est une interface sur les services session définis par l’OS: Quand il émet, le processus utilise les services de transport définis par l’OS La couche de transport de l’OS convoie le message vers l’OS du processus recevant. L’API permet : Le choix du protocole de transport Le paramétrage de la communication Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Le client socket TCP Lecture Ecriture Master 1 - SIGLIS Instanciation de la socket Socket maSocket = new Socket(host , port ) ; Obtenir l’inputStream associé à la socket InputStream is = maSocket.getInputStream() Lire is.read() Traitement …. Fermer la socket maSocket.close() Instanciation de la socket Socket maSocket = new Socket(host , port ) ; Obtenir l’outputStream associé à la socket OutputStream os = maSocket.getOutputStream() écrire os.write(data) / os.flush() Fermer la socket maSocket.close() Host est de type String Port est de type entier Il y a une outputstream et une inputstream attachée à la socket Avec java.io on peut faire mieux ! Fermeture de la socket Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Le serveur socket TCP Lecture Ecriture Master 1 - SIGLIS Instanciation de la socket Socket maSocket = new SocketServer(host , port ) ; Attente d’une demande de connexion maSocket.accept() Obtenir l’inputStream associé à la socket InputStream os = maSocket.getInputStream() Lire os.read() Traitement …. Fermer la socket maSocket.close() Instanciation de la socket Socket maSocket = new SocketServer(port ) ; Attente d’une demande de connexion maSocket.accept() Obtenir l’outputStream associé à la socket OutputStream os = maSocket.getOutputStream() Ecrire os.write(data) / os.flush() Fermer la socket maSocket.close() Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Un serveur avec les sockets Si le serveur ne se termine pas après chaque traitement de requête, il faut le faire boucler à l’infini. Si le serveur peut traiter plusieurs requêtes à la fois : il faut utiliser des threads pour traiter chaque requête indépendamment Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Le package java.io Reader BufferedReader StringReader CharArrayReader … InputStream FileInputStream ByteArrayInputStream ObjectInputStream PipedInputStream Writer BufferedWriter CharArrayWriter FileWriter PrintWriter OutputStream FileOutputStream ByteArrayOutputStream ObjectOutputStream PipedOutputStream TEXTE BINAIRE LECTURE ECRITURE InputStreamReader OutputStreamReader Pour lire du texte depuis une chaîne de caractères StringReader Pour lire un flux binaire depuis un fichier FileInputStream Pour écrire un objet dans un flux binaire ObjectOutputStream Pour lire du texte de façon optimisée (en utilisant un buffer) BufferedWriter OutputStreamReader et InputStreamreader permettent de convertir des données de texte en binaire Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Les classes d’interface de java.io LECTURE ECRITURE Reader int read() int read(char[] cbuf) void close() Writer void write(char[] cbuf) Void write(String str) Void write(int c) void close() TEXTE InputStream int read() int read(byte[] b) void close() OutputStream int write(int b) int write(byte[] b) void close() BINAIRE InputStream, OutputStream, Reader et Writer sont des interfaces Elles spécifient les méthodes que doivent implémenter leurs sous-classes. Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Le concept du décorateur Le decorateur est un « design pattern » : une forme de conception fréquente Le terme « Décorateur » désigne une forme de conception fréquente Un décorateur « décore » une classe Le décorateur en offre une interface adaptée au traitement que l’on doit faire en s’appuyant sur les services de la classe décorée. Classe Décorateur Classe Décorée Programmeur Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Exemple d’utilisation du pattern Decorator avec java.io FileReader fr = new FileReader("c:/Mes documents/User/monfichier.text") ; BufferedReader reader = new BufferedReader(fr) ; BufferedReader:reader FileReader:fr Programmeur Décorateur Classe décorée Le lien entre les deux objets est fait au moment de l’instanciation Dans l’exemple, BufferedReader optimise la lecture en utilisant un buffer de lecture. Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS java.io et les décorateurs Le pattern du décorateur permet de combiner les classes selon le traitement que l’on veut faire. On va l’utiliser pour les Sockets. Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Exercice Ecrire un client et un serveur echo le client envoie une chaîne de caractère au serveur et s’arrête Le serveur affiche la chaîne sur la console et s’arrête. Version 1 : Le client et le serveur sont sur la même machine Version 2 : Le client se lance en passant l’adresse Ip du serveur Version 3 : Le client se lance en passant l’adresse Ip ou le nom du serveur (faire des recherches sur la classe INetAdress). Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java Master 1 - SIGLIS Projet La socket calculatrice Master 1 SIGLIS Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java