1 / 34

Programmation Réseaux Illustration : Les Sockets en Java

Programmation Réseaux Illustration : Les Sockets en Java. Anne-Marie Déry. À travailler seuls. Concepts généraux. Mise en œuvre Java. Définir un nouveau type de socket. Pourquoi ? Préparer les données avant de les envoyer Reconstruire les données reçues Exemple Java RMI

tahir
Download Presentation

Programmation Réseaux Illustration : Les Sockets en Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Comment Définir un nouveau type de Sockets La classe CompressionSocket et ses classes relatives 4 étapes Communication TCP Définir des E/S Spécifiques 1. Etendre java.io.FilterOutputStream pour créer un output stream pour ce type de Socket. Surcharge de méthodes si nécessaire. Le write doit compresser l’image avant d’écrire 2. Etendre java.io.FilterInputStream Le read doit décompresser après avoir lu

  4. Comment Définir un nouveau type de Sockets La classe CompressionSocket et ses classes relatives 4 étapes 3. Etendre java.net.Socket Implémenter les constructeurs appropriés et surcharger getInputStream, getOutputStream et close. 4. Etendre java.net.ServerSocket Implémenter le constructeur et surcharger accept pour créer un socket du bon type.

  5. Un « nouveau » Package : java.nio Les principales nouveautés de cette API sont : Buffers : qui explicitent la notion de buffers – containers de données Améliorent les problème de bufferisation liées aux E/S Charsets : qui associent des « décodeurs » et des « encodeurs » qui gèrent correctement les conversions chaines – octets Éliminent les problème de accent (caractères Unicode / UTF),

  6. Un « nouveau » Package : java.nio Channels : qui représentent des connexions entre entités avec de meilleures performances pour les opérations de lecture et d’écriture Selectors et selection keys : associées aux selectable channels définissent des E/S multiplexées non bloquantes évitent les threads

  7. Le package Channel SelectableChannel : canal qui peut être multiplexé  DatagramChannel Un canal dédié aux communication UDP prises en charge par des sockets de type java.net.DatagramSocket ServerSocketChannel  : Un canal dédié aux connexion TCP prises en charge par des sockets de type java.net.ServerSocket   SocketChannel : Un canal dédié aux communication TCP prises en charge par des sockets de type java.net.Socket

  8. Le package Channel Et aussi… Selector Un multiplexeur pour des SelectableChannel SelectionKey représentant un canal étiqueté pour le multiplexage Pipe Deux canaux pour construire un pipe unidirectionnel (| shell)

  9. Les nouvelles sockets Ce package définit des classes de canaux qui sont utilisables par les classes de sockets : DatagramSocket, ServerSocket, et Socket de java.net package. In all cases, un canal est créé par appel à une méthode statique open définie dans chaque classe. La socket est créée par egget de bord.

  10. Exemple : Serveur d’heure • import java.io.*; • import java.net.*; • import java.nio.*; • import java.nio.channels.*; • import java.nio.charset.*; • import java.util.*; • import java.util.regex.*;

  11. Exemple : initialisations public class TimeServer { private static int PORT = 8013; private static int port = PORT; // Charset and encoder for US-ASCII private static Charset charset = Charset.forName("US-ASCII"); private static CharsetEncoder encoder = charset.newEncoder(); // Direct byte buffer for writing private static ByteBuffer dbuf = ByteBuffer.allocateDirect(1024);

  12. Exemple : attente de connexion sur le port du service // Open and bind the server-socket channel private static ServerSocketChannel setup() throws IOException { ServerSocketChannel ssc = ServerSocketChannel.open(); InetSocketAddress isa = new InetSocketAddress(InetAddress.getLocalHost(), port); ssc.socket().bind(isa); return ssc; }

  13. Exemple : communication avec un client // Service the next request to come in on the given channel // private static void serve(ServerSocketChannel ssc) throws IOException { SocketChannel sc = ssc.accept(); try { String now = new Date().toString(); sc.write(encoder.encode(CharBuffer.wrap(now + "\n"))); System.out.println(sc.socket().getInetAddress() + " : " + now); sc.close(); } finally { // Make sure we close the channel (and hence the socket) sc.close(); } }

  14. Exemple : code du serveur public static void main(String[] args) throws IOException { if (args.length > 1) { System.err.println("Usage: java TimeServer [port]"); return; } // If the first argument is a string of digits then we take that // to be the port number if ((args.length == 1) && Pattern.matches("[0-9]+", args[0])) port = Integer.parseInt(args[0]); ServerSocketChannel ssc = setup(); for (;;) serve(ssc); } }

  15. 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 à l’appel de méthodes à distance - Java RMI et une normalisation Corba avec l’intégration d’un ORB (cf aaplications réparties 2nd semestre) et maintenant les EJB : Entreprise Java Beans

  16. Retour sur RMI

  17. Exemple CLIENT Essifun SERVEUR de Surnoms oter infrastructure Protocole d’application ?

  18. Communication client serveur CLIENT SERVEUR Connexion au serveur Attente de requêtes Préparation de la requête Envoi de la requête Attente du résultat …. Analyse du résultat reçu Analyse de la requête ….. Exécution …. Préparation de la réponse Envoi de la réponse

  19. Exemple : annuaire des surnoms 1:Paul:bug ou ENR/nPaul/n/bug/n ou Objet Requête Seriablizable EssiFun SERVEUR de Surnoms enregistrer(« paul »,  «bug ») unmarshalling marshalling 0111000101000.. enregistrer(« paul », «bug ») = TRUE unmarshalling marshalling 101.. TRUE Différence entre un transport TCP et UDP pour le codage des données ?

  20. Que peut on automatiser ? Au minimum, la phase de marshalling/unmarshalling (hétérogéneité des langages, des systèmes, etc) Selon les cas, le squelette du serveur les appels distants du client

  21. Exemple : annuaire des surnomset RMI AnnuaireEssi listePersonnes enregistrer lister oter Enregistrer(AnneMarie,AM) lister()

  22. Exemple : annuaire des surnoms • interface : partie visible de l’objet (enregistrer, oter, lister, …) • implémentation : partie privée inaccessible depuis d’autres objets (listePersonnes : un vecteur de Personne ou un tableau ou ….) • interface = contrat entre l’objet et le monde extérieur (save impossible par exemple)

  23. RMI public interface Surnoms extends java.rmi.Remote { public Boolean enregistrer(String nom, String surnom) throws java.rmi.RemoteException, ServeurSurnoms.surnoms.ExisteDeja ; …. }

  24. Générateurs Spécifications des données Int. Java IDL Générateurs RMIC / Orbix... Fichiers générés Stubs Skeletons Proxy (mise en œuvre de la sérialisation et désérialisation…)

  25. RMIClasses et Interfaces Remote Machine locale Machine distante InterfaceDistante InterfaceDistante Souche Squelette Appel méthode m() Appel méthode m() ClasseLocale ClasseDistante

  26. Lookup : où est objetDistant ? client registre Il est ici result stub Envoyez le stub Le voici stub squelette result = objetDistant.m() objet Distant serveur client Interaction Client Enregistreur RMIRegistry + ClassLoader

  27. Exemple : annuaire des surnoms ASN.1 et norme ISO Protocole := CHOICE { enregistrerReq [0] SEQUENCE{PrintableString nom, PrintableString surnom} enregistrerRep[1] BOOLEAN, listerReq [2] NULL, listerRep [3] SET OF Personnes, ….} XDR et RPC de SUN Programme surnoms { version { boolean enregistrer(nomSurnom) = 1; listePersonnes lister(void)=2 }= 1 } = 10000

  28. Générateurs de Stubs Spécifications des données XDR ASN1 Générateurs RPCGEN / MAVROS Fichiers générés Types de données C Lisp Java Librairie marshalling et unmarshalling squelettes du client et du serveur Types de données C

  29. Les points communs des approches distribuées Adressage : à tout serveur (objet ou programme) doit être affecté une référence unique Transport : pour établir une communication entre 2 nœuds et transmettre une requête Marshalling : transformation de la requête pour passer sur le réseau

  30. Points communs Protocol : transmission des requêtes entre exécutables Dispatching : gestion des threads Des services communs Services de nommage Interface repository .....

  31. Restent à approfondir

  32. Communication réseaux et Internet Couches de transport Différences entre UDP et TCP (Développement d’un serveur multicast Ack/NoAck pour gérer la perte des paquets UDP) D’autres protocoles (RTP/RTCP) (introduction du routage multicast ou du tunelling) Principes du IP / protocole ICMP Service de nommage DNS Configuration services réseau

  33. Spécificités des Réseaux Locaux Introduction au Réseaux Locaux LANs Configuration carte réseau d’une machine, Développement d’un analyseur de trafic et standards IEEE 802 : IEEE 802.3 et Ethernet Configuration d’un Firewall : IPTables, Heureusement Dino est là :-)

  34. Quelques interrogations ? Comment choisir le bon middleware (intergiciel) ? Il y en a de plus en plus Corba, RMI, DCOM, DSA + CCM, J2EE + Web Services, .net .... Savoir les comparer Identifier les points communs Interopérabilité : XML une solution suffisante ? Heureusement Mireille est là 

More Related