Upload
others
View
18
Download
0
Embed Size (px)
Citation preview
Plan du Cours
● Présentation du module● Les entrées/sorties en Java● Échanges de données sur le réseau
Plan du Cours
● Présentation du module● Les entrées/sorties en Java● Échanges de données sur le réseau
Objectifs
● Mettre en œuvre la programmation réseau en Java● Les bases de la communication réseau - Sockets● Connexion aux bases de données● Les appels aux méthodes distants - XML-RPC● Les Objets Distribués – RMI● Introduction aux web services - JAX-WS
● Tous les cours seront mis en ligne● e-bureau● Site http://cosy.univ-reims.fr/~lsteffenel
Format de l'évaluation
● Contrôle continu● Notation de l'avancement sur chaque journée
● Projet de programmation● Énoncé à partir du 2ème cours● Évolution des sujets au fur et à mesure des cours● Rapport + code
Plan du Cours
● Présentation du module● Les entrées/sorties en Java● Échanges de données sur le réseau
E/S : une histoire de flux
● Lecture / écriture des fichiers, des flux réseaux ● Différentes type de stream sont disponibles (lecture
de bytes, de caractères, d’objets…)
● Au départ, deux super classes :● InputStream : lecture d’une séquence de bytes● OutputStream : écriture d’une séquence de bytes
● Après, une jungle de streams● FileInputStream, ObjectInputStream,
StringBufferInputStream, ByteArrayInputStream…
E/S : une histoire de flux
● Toute manipulation d'entrée et sortie se fait à travers des flux de données● En sortie (écran) le format par défaut est le
caractère● En entrée (clavier) le format est l'octet (Byte)● Avec les fichiers et les flux réseau, on trouve
plusieurs formats
Le package java.io
● Opérations d'entrées/sorties● Lecture de données séquentielles● Écriture de données séquentielles
● Flux définis● Objet InputStream
– System.in : flux d'entrée – le clavier
● Objets PrintStream– System.out : flux de sortie – l'écran
– System.err : flux de sortie d'erreurs – l'écran
Affichage à l'écran
● Affichage simple● System.out.println()
● System.out.print()
● Affichage formatée● System.out.format()
● System.out.format("%f, %1$+020.10f \n", Math.PI);
3.141593, +00000003.1415926536
Entrée à partir du clavier
● La classe System.in● Ne peut pas être utilisée directement (car c'est un
flux d'octets, pas de caractères)
● La solution : associer System.in● à une classe InputStreamReader/BufferedReader
– Opérations de bas niveau
● à la classe Scanner
● à la classe Console– Services supplémentaires
La classe InputStreamReader
● Gestion d'un flux de caractères en entrée● Utilise un flux d'entrée en octets comme source● Méthodes
● InputStreamReader(java.io.InputStream)
– Constructeur● int read () throws IOException
– Lecture d'un caractère● void close() throws IOException
– Fermeture du flot
Mise en tampon - buffering
● Principe : stockage d'informations dans une zone provisoire (tampon)● Gain de performance
● Applications● Lecture d'une chaîne de caractères● Écriture d'une chaîne de caractères
La classe BufferedReader
● Mise en tampon d'un flux de caractères● Méthodes
● BufferedReader(Reader in)
– Constructeur● int read () throws IOException
– Lecture d'un caractère● String readLine () throws IOException
– Lecture d'une chaîne de caractères● void close() throws IOException
– Fermeture du flot
Les Scanners
● Objectif : simplifier la lecture depuis les flux● Lecture d'éléments depuis le clavier● Lecture d'éléments depuis un fichier
● Classe java.util.Scanner
● Utilisation possible des expressions régulières pour définir des séparateurs
Construction d'objets Scanner
● Constructeurs● Scanner(InputStream src)
– Depuis un flux d'entrée● Scanner (File src)
– Depuis un fichier● Scanner (Readable src)
– Depuis une source implémentant Readable
Accès aux Données
● Lecture en fonction du type● Schéma global : XXX nextXXX()
● int nextInt()
– Lecture d'un entier● double nextDouble()
– Lecture d'un double● String nextLine()
– Lecture d'une chaîne
Méthodes de Test
● Test de la prochaine donnée● Test de l'existence d'une donnée
● boolean hasNext()
● Test du type de la prochaine donnée● boolean hasNextXXX()
● boolean hasNextInt()
● boolean hasNextDouble()
● boolean hasNextString()
La classe Console
● La classe Scanner ne convient pas à la lecture d'un mot de passe
● Utilisation de la classe Console (Java SE 6)
Console cons = System.console();
String username = cons.readLine("User name: ");
Char[] passwd = cons.readPassword("Password: ");
Entrée/sortie vers les fichiers
● Gestion du système de fichiers● Copie● Suppression● Gestion de droits● ...
● Gestion des contenus● Écriture dans un fichier● Lecture dans un fichier● ...
Gestion du Système de Fichiers
● La classe java.io.File
● Pas d'opération sur les flux● Pas de lecture● Pas d'écriture
● Gestion indépendante de la plate-forme
La classe File
● Méthodes● Constructeur
– Public File(String pathname)
● Manipulation du nom– String getName() // num du fichier seul
– String getPath() // nom et chemin
● Test des propriétés– boolean canRead()
– boolean canWrite()
– boolean isDirectory()
– boolean ifFile()
Écriture de fichiers de caractères
● La classe FileWriter
● Sous-classe de OutputStreamWriter
● Constructeurs● FileWriter (File) throws IOException
● FileWriter (String) throws IOException
● FileWriter (String, boolean) throws IOException
Lecture de fichiers de caractères
● La classe FileReader
● Sous-classe de InputStreamReader
● Constructeurs● FileReader (File) throws IOException
● FileReader (String) throws IOException
Écriture de fichiers d'octets
● La classe FileOutputStream
● Sous-classe de OutputStream
● Constructeurs● FileOutputStream (File) throws FileNotFoundException
● FileOutputStream (String) throws FileNotFoundException
● FileOutputStream (String, boolean) throws FileNotFoundException
Lecture de fichiers d'octets
● La classe FileInputStream
● Sous-classe de InputStream
● Constructeurs● FileInputStream (File) throws FileNotFoundException
● FileInputStream (String) throws FileNotFoundExceptionException
Sérialisation
● Mécanisme permettant de lire ou enregistrer des objets entiers ● Format binaire propre à Java● Interface Serializable
● Usage des streams ObjectOutputStream et ObjectInputStream
Plan du Cours
● Les entrées/sorties en Java● Échanges de données sur le réseau
La classe InetAddress
● Représentation des adresses IP● Aucun constructeur public● Création● public static InetAddress InetAddress.getByName (String nomHote)
throws UnknownHostException
● public static InetAddress InetAddress.getLocalHost (String nomHote) throws UnknownHostException
● Méthodes● public String getHostName()
● public byte[] getAddress()
● public String getHostAddress()
Les Sockets
● Un socket est un canal de communication entre deux applications. ● Un socket est lié à un port de manière à être
identifiable par la couche TCP.
ouverture par leclient
établissement d'une connexion
Les Sockets côté client
● La classe Socket● création et gestion de socket côté client● création des flux associés
● Méthodes● Constructeurs
Socket(String host, int port) throws IOExceptionSocket(InetAdress a, int port) throws IOException
● Fermetureclose() throws IOException
Les Sockets côté client
● Méthodes (continuation)● Flux associés
OutputStream getOutputStream() throws IOExceptionInputStream getInputStream() throws IOException
● Récupération d'informations localesInetAddress getLocalAddress()int getLocalPort()
● Récupération d'informations distantesInetAddress getInetAddress()int getPort()
Sockets côté Serveur
● La classe ServerSocket
● création et gestion de socket côté serveur● création des flux associés
● Méthodes● constructeur
– ServerSocket(int port) throws IOException
● fermeture– void close() throws IOException
● attente bloquante de connexion – Socket accept() throws IOException
Le code côté serveur
Le code côté client
Remarque
● Le code serveur ne permet qu'une connexion client à la fois● Utilisation de threads pour permettre des
connexions multiples● Structuration logique d'un serveur multiconnexions
while (true) { accepter une connexion; Créer une thread pour traiter l'appel du client; }
● On verra ça la semaine prochaine
Exercices
● Création d'une application client/serveur simple● Définition d'un protocole de communication● Création du serveur
– Traitement d'une seule requête à la fois– Log des accès stocké dans un fichier
● Création d'un client– Version 1 : appel par ligne de commande– Version 2 : interface graphique