Les Sockets et Java Cours réseaux Essi2 Anne-Marie Déry

  • Published on
    03-Apr-2015

  • View
    109

  • Download
    7

Embed Size (px)

Transcript

  • Page 1
  • Les Sockets et Java Cours rseaux Essi2 Anne-Marie Dry
  • Page 2
  • Sockets ? Outil de communication pour changer des donnes entre un client et un serveur Canaux de communication (descripteur dentre sortie dans lesquels on crit et sur lesquels on lit)
  • Page 3
  • Architecture client serveur Mode de communication quun hte tablit avec un autre hte qui fournit un service quelconque application opration Client Serveur Send request Send reply protocole dapplication
  • Page 4
  • Exemples d applications Classiques Serveur de Messages Serveur de newsSockets Serveur de fichiers Applications distribuesRMI Rservation de voyages Serveurs de vente Composants distribus.EJBs
  • Page 5
  • Besoins dune application Client- Serveur Similitudes avec un appel tlphonique via un standard 1. Trouver ladresse du serveur : trouver le no de tlphone de lentreprise 2. Demander un service spcifique : sadresser un service ou une personne prcise de lentreprise (no de poste) 3. Faire la requte 4. Obtenir une rponse Adresse dun serveur ? Identification dun service ?
  • Page 6
  • 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 requte Serveur de noms (DNS) : correspondances entre noms logiques et adresses IP (Annuaire) Port : canal ddi un service Protocole :langage utilis par 2 ordinateurs pour communiquer entre eux
  • Page 7
  • Adresse Internet et Port Adresse internet attribue chaque nud du rseau srie d octets dont la valeur dpend du type de rseau associe un nom logique (Domain Name Server) Chaque hte possde environ 65535 ports Port canal ddi un service spcifique 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
  • Page 8
  • Exemples d adresses Internet ypcat hosts sur SUN 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
  • Page 9
  • 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 .
  • Page 10
  • Ports rservs TCP Serveur FTP : 21 Serveur Telnet : 23 Serveur SMTP : 25 UDP Agent SNMP : 161 Logger SNMP : 162 Serveur rwhod : 513 Serveur multi processusApplications transactionnelles 1 1024 services fondamentaux (administrateurs) (sous unix cf. le fichier /etc/services) 1025 5000 disponibles pour les utilisateurs
  • Page 11
  • Plus prcisment un socket Plusieurs types de sockets : pour la communication inter processus classique pour communication rseau en mode datagramme pour communication rseau en mode connect une machine joue le rle du serveur et une autre (ou plusieurs) pour le client
  • Page 12
  • Scnario dun serveur Cration d un paquet d entre Attente de donnes en entre Rception des donnes en entre et calcul Cration dun paquet de sortie Envoi de la rponse Fermer le socket d entre Crer le socket d entre
  • Page 13
  • Scnario dun client Crer un paquet de sortie Envoyer une requte Crer un paquet d entre Attendre des donnes en entre Recevoir les donnes et les traiter Fermer le socket d entre Crer le socket d entre
  • Page 14
  • Sockets (Communication Client serveur) Serveur connecte le client sur un nouveau no de port et reste en attente sur le port original Client et serveur communiquent en crivant et lisant sur un socket Serveur est lcoute des requtes sur un port particulier Un client doit connatre lhte et le port sur lequel le serveur coute. Le client peut tenter une connexion au serveur
  • Page 15
  • Serveurs actifs Activation manuelle peu recommande Utilisation de Inetd sous UNIX Serveur particulier (dmon) attend pour les autres serveurs fichier de configuration : /etc/inetd.conf fichier /etc/services
  • Page 16
  • Contexte : modle OSI Couches Transports : Transmission Control Protocol User Datagram Protocol Couche communication : Internet Protocol Mode connect vs mode non connect rester en ligne pour demander plusieurs services ou rappeler lentreprise pour chaque nouvelle requte
  • Page 17
  • Sockets en Java ? BSD sockets UNIX au dessus de TCP ou UDP En Java toutes les classes relatives aux sockets sont dans le package java.net Une infrastructure puissante et flexible pour la programmation rseau
  • Page 18
  • Le Package net 4 Des Exceptions 4 Des entres Sorties 4 Des Sockets 4 ... Plusieurs hirarchies de classes
  • Page 19
  • Des types de Sockets ServerSocket HttpAwareServerSocket DatagramSocket MulticastSocket Socket HttpSendSocket WrappedSocket Object
  • Page 20
  • Des exceptions Exception IOException SocketExceptionProtocolException UnknownHostExceptionUnknownServiceException BindException ConnectException
  • Page 21
  • Des Entres Sorties Object InputStream FileInputStream SocketInputStream OutputStream FileOutputStream SocketOutputStream
  • Page 22
  • Autres Classes Object InetAdress DatagramPacketSocketImpl PlainSocketImpl
  • Page 23
  • Programmation en Java 4 Les oprations de base 4 Un exemple : le service SMTP 4 Un serveur dEcho 4 Aperus des autres types de communication Plusieurs Clients grs simultanment ( ligne non occupe) Client Serveur dataGram Communication Broadcast (runion tlphonique)
  • Page 24
  • Java.net.InetAddress : nommage La classe InetAddress 2 constructeurs : un par dfaut qui cre une adresse vide (cf la mthode accept sur Socket) un qui prend le nom de la machine hte et ladresse IP de la machine. Des accesseurs en lecture : pour rcuprer ladresse IP dune machine (getByName, getAllByName), des informations sur la machine hte (getLocalHost, getLocalAddress, getLocaName) Des comparateurs : galit (equals) et type dadresse (isMulticastAddress) ..
  • Page 25
  • TCP et Sockets 2 classes : Socket et ServerSocket (java.net package)
  • Page 26
  • Flot de requtes du client vers le serveur application opration Client Serveur Ouvrir connexion req1 req2 req3 reqn Fermer la connexion
  • Page 27
  • TCP et Sockets La classe Socket : une batterie de constructeurs : par dfaut, no de port + adresse / nom de machine et service distante, + no de port + adresse locale, crent un socket en mode Stream ou DataGramme des accesseurs en lecture : no de port et adresse laquelle il est connect, no de port et adresse laquelle il est li, input et output Stream associs (getPort, getInetAddress, getLocalPort, getLocalAddress, getInputStream, getOutputStream) des mthodes : close...
  • Page 28
  • TCP et Sockets La classe ServerSocket des constructeurs : par dfaut, no de port associ, + taille de la liste de clients en attente + adresse... des accesseurs en lecture : no de port sur lequel le socket coute, adresse laquelle il est connect (getPort, getInetAddress, ) des mthodes : accept pour accepter une communication avec un client, close...
  • Page 29
  • Un socket : une entre sortie ddie au rseau Gestion similaire des entres sorties standard (cran, clavier) et des fichiers En sortie (ex. System.out) : java.io.PrintStream (ou PrintWriter) utilise un flot dirig vers une sortie java.io.OutputStream En entre (ex. System.in) : java.io.InputStream
  • Page 30 1023)">
  • Comment ouvrir un socket ? Dans un client Socket MyClient; try { MyClient = new Socket("Machine name", PortNumber); } catch (IOException e) { System.out.println(e); } Machine name : machine laquelle on veut se connecter PortNumber port sur lequel tourne le serveur (> 1023)
  • Page 31
  • Dans un serveur ? ServerSocket MyService; try { MyServerice = new ServerSocket(PortNumber); } catch (IOException e) {System.out.println(e);} Cration dun objet socket pour couter et accepter les connexions des clients Socket clientSocket = null; try { ServiceSocket = MyService.accept();} catch (IOException e) {System.out.println(e); }
  • Page 32
  • Comment crer un Input Stream ? Ct client : pour recevoir une rponse du serveur try {input = new DataInputStream(MyClient.getInputStream());} catch (IOException e) {System.out.println(e);} DataInputStream : lire des lignes de texte, des entiers, des doubles,des caractres... ( read, readChar, readInt, readDouble, and readLine,. )
  • Page 33
  • Ct Serveur pour recevoir les donnes dun client DataInputStream input;: try { input = new DataInputStream(serviceSocket.getInputStream()); } catch (IOException e) {System.out.println(e);}
  • Page 34
  • Comment crer un Output Stream? Ct client : pour envoyer une information au serveur (PrintStream ou DataOutputStream) PrintStream output; try {output = new PrintStream(MyClient.getOutputStream;} catch (IOException e) {System.out.println(e);} PrintStream pour afficher des valeurs des types de base (write et println) ..
  • Le protocole SMTP, RFC1822/3 if (smtpSocket != null && os != null && is != null) { try{os.writeBytes("HELO\n"); os.writeBytes("MAIL From: pinna@essi.fr\n"); os.writeBytes("RCPT To: pinna@essi.fr\n"); os.writeBytes("DATA\n"); os.writeBytes("From: pinna@essi.fr\n"); os.writeBytes("Subject: Qui est l ?\n"); os.writeBytes("Vous suivez toujours ?\n"); // message os.writeBytes("\n.\n"); os.writeBytes("QUIT");
  • Page 41
  • SMTP // attente de "Ok" du serveur SMTP, String responseLine; while ((responseLine = is.readLine()) != null) { System.out.println("Server: " + responseLine); if (responseLine.indexOf("Ok") != -1) {break;}} os.close(); is.close(); smtpSocket.close(); } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException){ System.err.println("IOException: " + e);} } } }.
  • Page 42
  • Serveur Echo Un serveur similaire echo ( port 7). Reoit un texte du client et le renvoie identique Le serveur gre un seul client.
  • Page 43
  • Dclarations import java.io.*; import java.net.*; public class echo3 { public static void main(String args[]) { ServerSocket echoServer = null; String line; DataInputStream is; PrintStream os; Socket clientSocket = null; try { echoServer = new ServerSocket(9999);} catch (IOException e) {System.out.println(e); }
  • Page 44
  • try { clientSocket = echoServer.accept(); is = new DataInputStream(clientSocket.getInputStream()); os = new PrintStream(clientSocket.getOutputStream()); while (true) { line = is.readLine(); os.println(line); } catch (IOException e) { System.out.println(e);} } }
  • Page 45
  • Plusieurs clients application Clientn Serveur Ouvrir connexion application Client1 application Client2 S1 S2 Sn
  • Page 46
  • Plusieurs Clients Utiliser des threads pour accepter plusieurs clients simultanment. Le serveur gre un thread par client Thread constructeur start run
  • Page 47
  • Quelques mots sur les Threads Un thread permet lexcution dun programme. Une application peut avoir de multiples threads qui s excutent concurremment (Chaque thread a une priorit). Chaque thread a un nom. Plusieurs threads peuvent avoir le mme. Le nom est gnr si non spcifi. Il y a 2 faons de crer un nouveau thread dexcution. dclarer une sous classe de Thread et surcharger la mthode run. Une instance de la sous classe peut alors tre alloue et dmarrer. dclarer une classe qui implmente Runnable et donc la mthode run. Une instance de la classe peut tre alloue, passe comme argument la cration dun thread et dmarre.
  • Page 48
  • Un thread qui calcule des primes class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime... } PrimeThread p = new PrimeThread(143); p.start();
  • Page 49
  • Version2 class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime... } PrimeRun p = new PrimeRun(143); new Thread(p).start();
  • Page 50
  • Datagrammes UDP et Sockets 2 classes : DatagramPacket et DatagramSocket Datagramme = un message indpendant envoy sur le rseau arrive, temps darrive et contenu non garantis packages dimplmentation de communication via UDP de datagrammes
  • Page 51
  • 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 requtes au serveur ATTENTION Plusieurs firewalls et routeurs sont configurs pour interdire le passage de paquets UDP
  • Page 52
  • Envoi de datagrammes application opration Client Serveur req1 rep1 reqn repn
  • Page 53
  • Classe DatagramSocket Des constructeurs : par dfaut, + 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 reu ou envoy (getInetAddress, getLocalAddress, getPort, getLocalPort, getReceivedBufferSize, getSendBufferSize) Des mthodes : pour se connecter une adresse, pour se dconnecter, pour envoyer un paquet datagramme, pour un recevoir un paquet datagramme (connect, disconnect, send, receive)
  • Page 54
  • 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 donne transmise (getAddress, getPort, getData, getLength)
  • Page 55
  • Une Application Client Serveur Le serveur reoit en continu des paquets mode datagramme sur un socket un paquet reu = une demande de citation dun client le serveur envoie en rponse 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 rponse un paquet du serveur.
  • Page 56
  • La classe QuoteServer import java.io.*; public class QuoteServer { public static void main(String[] args) throws IOException { new QuoteServerThread().start(); } la classe QuoteServerThread implmente toute la logique du serveur.
  • Page 57
  • ...

Recommended

View more >