Développement d application client/serveur Zouhair ELHADARI www.hadari.jimdo.com Centre de BTS Dakhla 2 ème année BTS DSI
Chapitre 5 Programmation réseau en JAVA Prof:EL HADARI zouhair 2
Partie 1 : La programmation réseau en mode connecté (TCP) Prof:EL HADARI zouhair 3
La classe java.net.inetaddress Représente une adresse IP:utilisé 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 adresse(s) de l hôte dont le DNS est passé en paramètre public static InetAddress getlocalhost() throws UnknownHostException donne l adresse de l hôte local Prof:EL HADARI zouhair 4
Exemple public static void main (String[] args){ try { InetAddress ad = InetAddress.getByName(" adresse.com"); System.out.println(ad); catch (UnknownHostException e) { System.out.println(" Could not find this web address. "); 5
La classe java.net.serversocket Coté serveur Crée le ServerSocket : ServerSocket S_server = new ServerSocket(port); attend les demandes de connexion et crée un socket pour le dialogue Socket S_service = S_server.accept(); récupère les flux d entrée et de sortie InputStream in = S_service.getInputStream(); OutputStream out = S_service.getOutputStream(); Prof:EL HADARI zouhair 6
La classe java.net.socket Coté client Crée le Socket : Socket S_client = new Socket(host,port); récupère les flux d entrée et de sortie InputStream in = S_client.getInputStream(); OutputStream out = S_client.getOutputStream(); Prof:EL HADARI zouhair 7
Exemples Prof:EL HADARI zouhair 8
Comment ouvrir un socket? (1) Dans un client Socket S_Client; try { S_Client = new Socket(Host, Port ); catch (IOException e) { System.out.println(" erreur"); Host: @ machine à laquelle veut se connecté le client Port: port sur lequel tourne le serveur
Comment ouvrir un socket? (2) Dans un serveur:création d un objet socket pour écouter et accepter les connexions des clients ServerSocket S_serveur; try { S_serveur = new ServerSocket(Port); catch (IOException e) {System.out.println("erreur"); Socket S_service = null; try { S_service = S_serveur.accept(); catch (IOException e) { System.out.println(«erreur");
Comment créer un Input Stream?(1) Côté client : pour recevoir une réponse du serveur InputStream input; try { input = S_Client.getInputStream( ); catch (IOException e) { System.out.println("erreur"); Rmq:Pour lire des lignes de texte, des entiers, des doubles,des caractères... ( read, readchar, readint, readdouble, and readline,. )
Comment créer un Input Stream?(1) Côté Serveur:pour recevoir les données d un client InputStream input; try { input = S_service.getInputStream( ); catch (IOException ex) { System.out.println ("erreur");
Comment créer un Output Stream?(1) Côté client : pour envoyer une information au serveur OutputStream out ; try {out = S_Client.getOutputStream( ); catch (IOException e) { System.out.println ("erreur"); Rmq:pour afficher des valeurs des types de base (write et println)
Comment créer un Output Stream?(2) Côté Serveur :Pour envoyer des informations au client OutputStream out ; try { out = S_service.getOutputStream( ); catch (IOException e) { System.out.println ("erreur");
Comment fermer un socket? Fermer les output et input stream avant le socket. Côté client output.close(); input.close(); S_Client.close(); Côté serveur output.close(); input.close(); S_service.close(); S_serveur.close();
Exemple d application: Client serveur très basique: un exemple de serveur qui accepte une connexion du client.il reçoit un entier puis renvoie au client (entier + 5). Prof:EL HADARI zouhair 16
import java.net.*; import java.io.*; public class ClientTCP { public static void main(string[] args) { try { Socket s_client = new Socket("localhost", 1800) OutputStream out = s_client.getoutputstream(); InputStream in = s_client.getinputstream(); out.write((int) Entier); System.out.println((char) in.read()); s_client.close (); catch (Exception e) {système.out.println( erreur ); Prof:EL HADARI zouhair 17
import java.net.*; import java.io.*; public class ServeurTCP{ public static void main(string[] args) { try { ServerSocket socket_ecoute = new ServerSocket(1800); Socket service = null; service = socket_ecoute.accept(); OutputStream out =service.getoutputstream(); InputStream out.write(in.read() + 5); service.close (); socket_ecoute.close( ); in =service.getinputstream(); catch (Exception e) { système.out.println( erreur ); Prof:EL HADARI zouhair 18
Gestion des Flux de données: une fois la connexion réalisée, il faut obtenir les streams d E/S (java.io) auprès de l instance de la classe Socket. Flux entrant obtention d un stream simple: InputSteam in = socket.getinputstream(); création d un stream convertissant les bytes reçus en char InputSteamReader reader = new InputStreamReader(in); création d un stream de lecture avec tampon: pour lire ligne par ligne dans un stream de caractères BufferedReader instream = new BufferedReader(reader); lecture d une chaîne de caractères String line = instream.readline(); Prof:EL HADARI zouhair 19
Gestion des Flux de données: Flux sortant obtention du flot de données sortantes : bytes OutputSteam out = socket.getoutputstream(); création d un stream convertissant les bytes en chaînes de caractères PrintWriter outstream = new PrintWriter(out); envoi d une ligne de caractères outstream.println( str ); envoi effectif sur le réseau des bytes (important) outstream.flush(); Prof:EL HADARI zouhair 20
Prof:EL HADARI zouhair 21
Fin de la 1 ère Partie Prof:EL HADARI zouhair 22
Partie 2: La programmation réseau en mode non-connecté (UDP).. A suivre Prof:EL HADARI zouhair 23