Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parCélestin Coulon Modifié depuis plus de 11 années
1
Programmation Réseaux Illustration : 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 limage 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 dheure 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 à lappel de méthodes à distance - Java RMI et une normalisation Corba avec lintégration dun ORB (cf aaplications réparties 2 nd semestre) et maintenant les EJB : Entreprise Java Beans
16
Retour sur RMI
17
Exemple CLIENT Essifun SERVEUR de Surnoms oter infrastructure Protocole dapplication ?
18
Communication client serveur CLIENT SERVEUR Préparation de la requête Envoi de la requête Attente du résultat …. Analyse du résultat reçu Connexion au serveur Attente de requêtes Analyse de la requête ….. Exécution …. Préparation de la réponse Envoi de la réponse
19
Exemple : annuaire des surnoms EssiFun SERVEUR de Surnoms enregistrer(« paul », « bug ») marshalling unmarshalling 0111000101000.. 101.. enregistrer(« paul », « bug ») = TRUE TRUE 1:Paul:bug ou ENR/nPaul/n/bug/n ou Objet Requête Seriablizable 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 surnoms et RMI enregistrer lister oter AnnuaireEssi listePersonnes Enregistrer(AnneMarie,AM) lister()
22
Exemple : annuaire des surnoms interface : partie visible de lobjet (enregistrer, oter, lister, …) implémentation : partie privée inaccessible depuis dautres objets (listePersonnes : un vecteur de Personne ou un tableau ou ….) interface = contrat entre lobjet 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 RMIC / Orbix... IDL Int. Java Spécifications des données Générateurs Fichiers générés Stubs Skeletons Proxy (mise en œuvre de la sérialisation et désérialisation…)
25
RMI Classes et Interfaces ClasseLocale SoucheSquelette ClasseDistante InterfaceDistante Remote Appel méthode m() Machine localeMachine distante InterfaceDistante
26
Interaction Client Enregistreur client serveur clientregistre Lookup : où est objetDistant ? stub Il est ici Envoyez le stub Le voici stubsquelette objet Distant result = objetDistant.m() result RMIRegistry + ClassLoader
27
Exemple : annuaire des surnoms XDR et RPC de SUN Protocole := CHOICE { enregistrerReq [0] SEQUENCE{PrintableString nom, PrintableString surnom} enregistrerRep[1] BOOLEAN, listerReq [2] NULL, listerRep [3] SET OF Personnes, ….} Programme surnoms { version { boolean enregistrer(nomSurnom) = 1; listePersonnes lister(void)=2 }= 1 } = 10000 ASN.1 et norme ISO
28
Générateurs de Stubs RPCGEN / MAVROS ASN1 XDR Librairie marshalling et unmarshalling squelettes du client et du serveur Spécifications des données Générateurs Types de données C Lisp Java Types de données C Fichiers générés
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 dun serveur multicast Ack/NoAck pour gérer la perte des paquets UDP) Dautres protocoles (RTP/RTCP) (introduction du routage multicast ou du tunelling) Principes du IP / protocole ICMP Service de nommage DNS Configuration services réseau
33
Introduction au Réseaux Locaux LANs Configuration carte réseau dune machine, Développement dun analyseur de trafic et standards IEEE 802 : IEEE 802.3 et Ethernet Configuration dun Firewall : IPTables, Spécificités des Réseaux Locaux 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à
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.