La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.

Présentations similaires


Présentation au sujet: "Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java."— Transcription de la présentation:

1 Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java

2 Besoins dune application Client-Serveur Similitudes avec un appel téléphonique via un standard 1. Trouver ladresse du serveur : trouver le no de téléphone de lentreprise 2. Demander un service spécifique : sadresser à un service ou une personne précise de lentreprise (no de poste) 3. Faire la requête 4. Obtenir une réponse Adresse dun serveur ? Identification dun service ?

3 Un peu de vocabulaire Client : entité qui fait l appel Sockets : moyen de communication entre ordinateurs Adresses IP : adresse dun ordinateur Serveur : entité qui prend en charge la requête Serveur de noms (DNS, LDAP) : correspondances entre noms logiques et adresses IP (Annuaire) Port : canal dédié à un service Protocole : langage utilisé par 2 ordinateurs pour communiquer entre eux

4 Adresse Internet et Port Adresse internet attribuée à chaque nœud du réseau série d octets dont la valeur dépend du type de réseau associée à un nom logique (Domain Name Server) Chaque hôte possède environ 65535 ports Port canal dédié à un service spécifique 80 pour le service http 25 pour le service SMTP TCP implique une file dattente par connexion UDP implique une file dattente unique pour le port

5 Exemples d adresses Internet ypcat hosts sous linux 157.169.9.15 oscar.essi.fr oscar 157.169.20.5 accueil.essi.fr accueil 157.169.20.4 compta.essi.fr compta 157.169.25.201 www-local.essi.fr www-local 157.169.10.222 pcprofs.essi.fr pcprofs 157.169.4.50 ada.essi.fr ada 157.169.10.120 macserver.essi.fr macserver 157.169.10.240 demo.essi.fr demo 157.169.1.20 bibli.essi.fr bibli 157.169.25.110 sfe-srv.essi.fr sfe-srv sfe 157.169.1.153 bde.essi.fr bde 157.169.3.204 niv1a.essi.fr niv1a 157.169.1.155 dessi.essi.fr dessi 157.169.10.2 jessica.essi.fr jessica print2

6 Exemples d adresses 157.169.25.200 news-srv.essi.fr news-srv www.essi.fr www-srv.essi.fr news 134.59.132.21 dolphin.unice.fr 157.169.10.1 essi2.essi.fr loghost essi2 Essi : 157.169 I3S: 134.59 serveurs : 25 Administration : 1 …….

7 Ports réservés TCP Serveur FTP : 21 Serveur Telnet : 23 Serveur SMTP : 25 UDP Agent SNMP : 161 Logger SNMP : 162 …. Serveur multi processusApplications transactionnelles 1 à 1024 services fondamentaux (administrateurs) (sous unix cf. le fichier /etc/services, ypcat services) 1025 à 5000 disponibles pour les utilisateurs

8 Programmation Socket Deux types de transports via les socket API: –Datagramme (non reliable) –Orienté flux doctets (reliable) Une porte à travers laquelle lapplication peut à la fois envoyer et recevoir des messages dune autre application socket Comment construire des applications client/server qui communiquent via les sockets

9 Programmation socket avec TCP Le Client doit contacter le serveur Le processus serveur doit être en train de sexécuter Le serveur doit avoir créé un socket qui devient le point dentrée des clients Le Client contacte le serveur en Créant un socket TCP client- localement Spécifiant ladresse et le no de port number du processus serveur Lorsque le client crée le socket: le client TCP établit une connexion avec le serveur TCP Lorsque le client le contacte le serveur TCP crée une nouvelle socket pour que le processus serveur communique avec le client –Permet de parler avec plusieurs clients

10 Applications distribuées et parallèlisme La communication ne doit pas rester bloquée pour un client

11 Interaction Client/server : socket TCP Serveur (sexécutant sur lhôte) Client wait for incoming connection request connectionSocket = welcomeSocket.accept() create socket, port= x, for incoming request: welcomeSocket = ServerSocket() create socket, connect to hostid, port= x clientSocket = Socket() close connectionSocket read reply from clientSocket close clientSocket send request using clientSocket read request from connectionSocket write reply to connectionSocket TCP connection setup

12 Plusieurs Clients Utiliser des threads pour accepter plusieurs clients simultanément. Le serveur gère un thread par client

13 Plusieurs clients application Clientn Serveur Ouvrir connexion application Client1 application Client2 S1 S2 Sn

14 Quelques mots sur les Threads Un thread permet lexécution dun programme. Une application peut avoir de multiples threads qui s exécutent concurremment (Chaque thread a une priorité). Chaque thread a un nom. Plusieurs threads peuvent avoir le même. Le nom est généré si non spécifié. Il y a 2 façons de créer un nouveau thread dexécution. déclarer une sous classe de Thread et surcharger la méthode run. Une instance de la sous classe peut alors être allouée et démarrer. déclarer une classe qui implémente Runnable et donc la méthode run. Une instance de la classe peut être allouée, passée comme argument à la création dun thread et démarrée.

15 while (true) { accept a connection ; create a thread to deal with the client ; end while Scénario du Serveur Multithreadé

16 public class MultiServerThread extends Thread { private Socket socket = null; public MultiServerThread(Socket socket) { super("MultiServerThread"); this.socket = socket; } public void run() { try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream())); …… } out.close(); in.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }

17 public class MultiServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; boolean listening = true; try { serverSocket = new ServerSocket(4444); } catch (IOException e) { System.err.println("Could not listen on port: 4444."); System.exit(-1); } while (listening) new MultiServerThread(serverSocket.accept()).start(); serverSocket.close(); } }

18 Ce que RMI ne sait pas vraiment faire ? Communication asynchrone par messages Communication par diffusion

19 Communication par message : Envoi de datagrammes application opération Client Serveur req1 rep1 reqn repn

20 Programmation Socket avec UDP UDP: pas de connexion entre le client et le serveur Pas de lien privilégié entre le client et le serveur Lemetteur attache ladresse IP et le port pour le retour. Le serveur doit extraire ladresse IP et le port de lexpéditeur à partir du datagramme reçu application viewpoint UDP fournit un transfert non fiable de groupes doctets (datagrammes) entre un client et le serveur UDP: les données transmises peuvent être reçues dans le désordre ou perdues

21 Client/server socket interaction: UDP close clientSocket Serveur read reply from clientSocket create socket, clientSocket = DatagramSocket() Create, address ( hostid, port=x, send datagram request using clientSocket create socket, port= x, for incoming request: serverSocket = DatagramSocket() read request from serverSocket write reply to serverSocket specifying client host address, port umber Client

22 Scénario dun serveur Création d un paquet d entrée Attente de données en entrée Réception et Analyse des données en entrée Calcul Création dun paquet de sortie Préparation et Envoi de la réponse Fermer le socket d entrée Créer le socket d entrée

23 Scénario dun client Créer un paquet de sortie Préparer et Envoyer une requête Créer un paquet dentrée Attendre des données en entrée les recevoir et les traiter Fermer le socket d entrée Créer le socket d entrée

24 Datagrammes UDP et Sockets 2 classes : DatagramPacket et DatagramSocket Datagramme = un message indépendant envoyé sur le réseau arrivée, temps darrivée et contenu non garantis packages dimplémentation de communication via UDP de datagrammes

25 Exemple Un serveur de citation qui écoute un socket type datagram et envoie une citation si le client le demande Un client qui fait simplement des requêtes au serveur ATTENTION Plusieurs firewalls et routeurs sont configurés pour interdire le passage de paquets UDP

26 Une Application Client Serveur Le serveur reçoit en continu des paquets mode datagramme sur un socket un paquet reçu = une demande de citation dun client le serveur envoie en réponse un paquet qui contient une ligne "quote of the moment" Lapplication cliente envoie simplement un paquet datagramme au serveur indiquant quil souhaite recevoir une citation et attend en réponse un paquet du serveur.

27 La classe QuoteServer socket = new DatagramSocket(4445); Création dun DatagramSocket sur le port 4445 qui permet au serveur de communiquer avec tous ces clients try { in = new BufferedReader(new FileReader("one-liners.txt")); } catch (FileNotFoundException e) System.err.println("Couldn't open quote file. " + "Serving time instead."); } Le constructeur ouvre aussi un BufferedReader sur un fichier qui contient une liste de citations ( une citation par ligne)

28 suite contient une boucle qui tant quil y a des citations dans le fichier attend larrivée d un DatagramPacket correspondant à une requête client sur un DatagramSocket. Byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); En réponse une citation est mise dans un DatagramPacket et envoyée sur le DatagramSocket au client demandeur. String dString = null; if (in == null) dString = new Date().toString(); else dString = getNextQuote(); buf = dString.getBytes(); InetAddress address = packet.getAddress(); int port = packet.getPort(); packet = new DatagramPacket(buf, buf.length, address, port); socket.send(packet);

29 Suite Adresse Internet + numéro de port (issus du DatagramPacket ) = identification du client pour que le serveur puisse lui répondre Larrivée du DatagramPacket implique une requête ->contenu du buffer inutile Le constructeur utilisé pour le DatagramPacket : un tableau doctets contenant le message et la taille du tableau + Ladresse Internet et un no de port. Lorsque le serveur a lu toutes les citations on ferme le socket de communication. socket.close();

30 La classe QuoteClient envoie une requête au QuoteServer, attend la réponse et affiche la réponse à lécran. Variables utilisées : int port; InetAddress address; DatagramSocket socket = null; DatagramPacket packet; byte[] sendBuf = new byte[256]; Le client a besoin pour s exécuter du nom de la machine sur laquelle tourne le serveur if (args.length != 1) { System.out.println("Usage: java QuoteClient "); return; }

31 La partie principale du main Création d un DatagramSocket DatagramSocket socket = new DatagramSocket(); Le constructeur lie le Socket à un port local libre Le programme envoie une requête au serveur byte[] buf = new byte[256]; InetAddress address = InetAddress.getByName(args[0]); DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445); socket.send(packet); Ensuite le client récupère une réponse et laffiche

32 Classe DatagramSocket Des constructeurs : par défaut, + no port + Adresse Inet Des accesseurs en lecture : adresse à laquelle le socket est lié, est connecté, le no port auquel il est lié, connecté, taille du buffer reçu ou envoyé (getInetAddress, getLocalAddress, getPort, getLocalPort, getReceivedBufferSize, getSendBufferSize…) Des méthodes : pour se connecter à une adresse, pour se déconnecter, pour envoyer un paquet datagramme, pour un recevoir un paquet datagramme (connect, disconnect, send, receive)

33 Classe DatagramPacket Des constructeurs : buffer + longueur de buffer + adresse destination + port… Des accesseurs en lecture : adresse à laquelle le paquet est envoyé, le no port à laquelle le paquet est envoyé, la donnée transmise (getAddress, getPort, getData, getLength…)

34 Communication par diffusion : Multicast Clientn Serveur Client1 Client2 Gr

35 Ouvrir un socket = demander à se Connecter Les clients demandent seulement à joindre un groupe

36 Exemple de multicast Un serveur de citation qui envoie une citation toutes les minutes à tous les clients qui écoutent (multicast)

37 Créer un paquet de sortie Préparer et Envoyer une donnée Scénario dun serveur Fermer le socket dentrée Créer le socket dentrée

38 Scénario dun client Création dun paquet dentrée Attente de données en entrée Réception et traitement des données en entrée Fermer le socket d entrée Créer le socket dentrée

39 Classe MulticastServer Des constructeurs : par défaut, port à utiliser Des accesseurs en lecture : adresse du groupe (getInterface…) Des méthodes : pour envoyer un paquet datagramme, pour joindre ou quitter un groupe (send, joinGroup, leaveGroup)

40 Multicast: MulticastSocket Type de socket utilisé côté client pour écouter des paquets que le serveur « broadcast » à plusieurs clients.. Une extension du QuoteServer : broadcast à intervalle régulier à tous ses clients

41 Cœur du serveur while (moreQuotes) { try { byte[] buf new byte[256]; // don't wait for request...just send a quote String dString = null; if (in == null) dString = new Date().toString(); else dString = getNextQuote(); buf = dString.getBytes(); InetAddress group = InetAddress.getByName("230.0.0.1"); DatagramPacket packet; packet = new DatagramPacket(buf, buf.length, group, 4446); socket.send(packet); try {sleep((long)Math.random() * FIVE_SECONDS); } catch (InterruptedException e) { } } catch (IOException e) { e.printStackTrace(); moreQuotes = false;} } socket.close();}

42 Différences principales Le DatagramPacket est construit à partir de de « ladresse de plusieurs clients » L adresse et le no de port sont câblés no de port 4446 (tout client doit avoir un MulticastSocket lié à ce no). Ladresse InetAddress "230.0.0.1" correspond à un identificateur de groupe et non à une adresse Internet de la machine dun client Le DatagramPacket est destiné à tous les clients qui écoutent le port 4446 et qui sont membres du groupe "230.0.0.1".

43 Un nouveau Client Pour écouter le port 4446, le programme du client doit créer son MulticastSocket avec ce no. Pour être membre du groupe "230.0.0.1" le client adresse la méthode joinGroup du MulticastSocket avec ladresse didentification du groupe. Le serveur utilise un DatagramSocket pour faire du broadcast à partir de données du client sur un MulticastSocket. Il aurait pu utiliser aussi un MulticastSocket. Le socket utilisé par le serveur pour envoyer le DatagramPacket nest pas important. Ce qui est important pour le broadcast est dadresser linformation contenue dans le DatagramPacket, et le socket utilisé par le client pour lécouter.

44 MulticastSocket socket = new MulticastSocket(4446); InetAddress group = InetAddress.getByName("230.0.0.1"); socket.joinGroup(group); DatagramPacket packet; for (int i = 0; i < 5; i++) { byte[] buf = new byte[256]; packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String received = new String(packet.getData()); System.out.println("Quote of the Moment: " + received); } socket.leaveGroup(group); socket.close();

45 Synthèse ClientServeur TCPaSocketaServerSocket connectéwriteread readwrite UDPaDatagramSocketaDatagramSocket non connecté sendreceive receivesend MulticastaMulticastSocketaDatagramSocket/ aMulticastSocket receivesend I/O Stream aDatagramPacket

46 Définir un nouveau type de socket Pourquoi ? Préparer les données avant de les envoyer Préparer les données reçues Exemple Java RMI Sockets spécialisées (marshalling et unmarshalling) Images : Compression et Décompression Comment ? En spécialisant les classes de base

47 Un nouveau Package : java.nio The central abstractions of the NIO APIs are: Buffers, which are containers for data; Charsets and their associated decoders and encoders, which translate between bytes and Unicode characters; Channels of various types, which represent connections to entities capable of performing I/O operations; and Selectors and selection keys, which together with selectable channels define a multiplexed, non blocking I/O facility.

48 Conclusion Une large bibliothèque pour traiter les sockets et différents types de communication entre Clients et Serveurs dans Java Une extension naturelle par abstraction à lappel de méthodes à distance - Java RMI et une normalisation Corba avec lintégration dun ORB et maintenant les EJB : Entreprise Java Beans et JINI …..


Télécharger ppt "Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java."

Présentations similaires


Annonces Google