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

Programmation Réseaux Illustration : Les Sockets en Java

  • Upload
    tahir

  • View
    32

  • Download
    1

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Programmation Réseaux Illustration : Les Sockets en Java

Programmation RéseauxIllustration : Les Sockets en Java

Anne-Marie DéryÀ travailler seuls

Concepts généraux

Mise en œuvre Java

Page 2: Programmation Réseaux Illustration : Les Sockets en Java

Définir un nouveau type de socket

Pourquoi ?Préparer les données avant de les envoyerReconstruire les données reçues

ExempleJava RMI Sockets spécialisées (marshalling et unmarshalling)

Exemple Images : Compression et Décompression

Comment ?En spécialisant les classes de base

Page 3: Programmation Réseaux Illustration : Les Sockets en Java

Comment Définir un nouveau type de Sockets

La classe CompressionSocket et ses classes relatives4 é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

Page 4: Programmation Réseaux Illustration : Les Sockets en Java

Comment Définir un nouveau type de Sockets

La classe CompressionSocket et ses classes relatives4 étapes

3. Etendre java.net.Socket Implémenter les constructeurs appropriés et surchargergetInputStream, getOutputStream et close.

4. Etendre java.net.ServerSocket Implémenter le constructeur et surcharger acceptpour créer un socket du bon type.

Page 5: Programmation Réseaux Illustration : Les Sockets en Java

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),

Page 6: Programmation Réseaux Illustration : Les Sockets en Java

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

Page 7: Programmation Réseaux Illustration : Les Sockets en Java

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

Page 8: Programmation Réseaux Illustration : Les Sockets en Java

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)

Page 9: Programmation Réseaux Illustration : Les Sockets en Java

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.

Page 10: Programmation Réseaux Illustration : Les Sockets en Java

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.*;

Page 11: Programmation Réseaux Illustration : Les Sockets en Java

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);

Page 12: Programmation Réseaux Illustration : Les Sockets en Java

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; }

Page 13: Programmation Réseaux Illustration : Les Sockets en Java

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(); } }

Page 14: Programmation Réseaux Illustration : Les Sockets en Java

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); } }

Page 15: Programmation Réseaux Illustration : Les Sockets en Java

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

Page 16: Programmation Réseaux Illustration : Les Sockets en Java

Retour sur RMI

Page 17: Programmation Réseaux Illustration : Les Sockets en Java

Exemple

CLIENT Essifun SERVEUR de Surnoms

oter

infrastructure

Protocole d’application ?

Page 18: Programmation Réseaux Illustration : Les Sockets en Java

Communication client serveur

CLIENT SERVEUR

Préparation de la requêteEnvoi de la requêteAttente 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éponseEnvoi de la réponse

Page 19: Programmation Réseaux Illustration : Les Sockets en Java

Exemple : annuaire des surnoms

EssiFun SERVEUR de Surnoms

enregistrer(« paul », 

«bug »)

marshalling

marshalling

unmarshalling

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 ?

Page 20: Programmation Réseaux Illustration : Les Sockets en Java

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

Page 21: Programmation Réseaux Illustration : Les Sockets en Java

Exemple : annuaire des surnomset RMI

enregistrerlisteroter

AnnuaireEssi

listePersonnes

Enregistrer(AnneMarie,AM)lister()

Page 22: Programmation Réseaux Illustration : Les Sockets en Java

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)

Page 23: Programmation Réseaux Illustration : Les Sockets en Java

RMI

public interface Surnoms extends java.rmi.Remote{public Boolean enregistrer(String nom, String surnom) throws

java.rmi.RemoteException, ServeurSurnoms.surnoms.ExisteDeja ;

…. }

Page 24: Programmation Réseaux Illustration : Les Sockets en Java

Générateurs

RMIC / Orbix...

IDL Int. JavaSpécificationsdes données

Générateurs

Fichiersgénérés Stubs Skeletons Proxy

(mise en œuvre de la sérialisationet désérialisation…)

Page 25: Programmation Réseaux Illustration : Les Sockets en Java

RMI

Classes et Interfaces

ClasseLocale

Souche Squelette

ClasseDistante

InterfaceDistante

Remote

Appel méthode m() Appel méthode m()

Machine locale Machine distante

InterfaceDistante

Page 26: Programmation Réseaux Illustration : Les Sockets en Java

Interaction Client Enregistreur

client serveur

client registreLookup : où est objetDistant ?

stub

Il est ici

Envoyez le stub

Le voicistub squelette

objetDistant

result = objetDistant.m()

result

RMIRegistry + ClassLoader

Page 27: Programmation Réseaux Illustration : Les Sockets en Java

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

Page 28: Programmation Réseaux Illustration : Les Sockets en Java

Générateurs de Stubs

RPCGEN / MAVROS

ASN1 XDR

Librairie marshalling et unmarshalling

squelettes du client et du serveur

Spécificationsdes données

Générateurs

Types de donnéesC Lisp Java

Types de données

C

Fichiersgénérés

Page 29: Programmation Réseaux Illustration : Les Sockets en Java

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êteMarshalling :

transformation de la requête pour passer sur leréseau

Page 30: Programmation Réseaux Illustration : Les Sockets en Java

Points communs

Protocol :transmission des requêtes entre exécutables

Dispatching :gestion des threads

Des services communsServices de nommageInterface repository.....

Page 31: Programmation Réseaux Illustration : Les Sockets en Java

Restent à approfondir

Page 32: Programmation Réseaux Illustration : Les Sockets en Java

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 laperte 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

Page 33: Programmation Réseaux Illustration : Les Sockets en Java

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 EthernetConfiguration d’un Firewall : IPTables,

Spécificités des Réseaux Locaux

Heureusement Dino est là :-)

Page 34: Programmation Réseaux Illustration : Les Sockets en Java

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 comparerIdentifier les points communsInteropérabilité : XML une solution suffisante ?

Heureusement Mireille est là