Beruflich Dokumente
Kultur Dokumente
Anne-Marie Dry
travailler seuls
Rseau et dpartement SI
Couches Rseaux : protocoles TCP UDP Programmation Rseaux Sockets Java et C Introduction aux applications rparties Programmation par Composants Expriences Industrielles Administration et scurit des rseaux Rseaux sans fil Applications Temps Rel
Questions prliminaires
Diffrences entre les protocoles de transport TCP et UDP ? Utilisation des adresses Internet ? Utilisation des ports ? Programmation sockets : avantages et inconvnients
Client
application
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) Gestion similaire des entres sorties standard (cran, clavier) et des fichiers
Exemples dapplications
Un serveur dEcho Un exemple : le service SMTP
Sockets en Java ?
BSD sockets UNIX au dessus de TCP ou UDP Une infrastructure puissante et flexible pour la programmation rseau
En Java toutes les classes relatives aux sockets sont dans le package java.net
Le Package net
Des Exceptions Des entres Sorties Des Sockets ...
ServerSocket
DatagramSocket MulticastSocket
Socket
Des exceptions
Exception IOException SocketException ProtocolException UnknownHostException UnknownServiceException BindException ConnectException
InputStream
OutputStream
FileOutputStream
ObjectOutputStream
FilterOutputStream
DataInputStream DataOutputStream
Autres Classes
Object
InetAdress DatagramPacket SocketImpl
PlainSocketImpl
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) ..
TCP
TCP fournit un transfert fiable, conservant lordre de transfert des octets (pipe) entre le client et le serveur
Serveur
Client
application
opration
TCP
setup
create socket, connect to hostid, port=x clientSocket = Socket() send request using clientSocket
Client
Prparer la requte lenvoyer sur le flux de sortie Attendre des donnes sur le flux d entre les lire et les traiter
Fermer le socket
TCP et Sockets
2 classes : Socket et ServerSocket (java.net package) pour les canaux de communication Classes pour le flot de donnes XInputStream et XOutputStream
Transfert de donnes
Connexion + Marshalling
Crer un objet socket pour couter les demandes de connexion sur le numro de port associ au service Crer un objet socket pour accepter une connexion d un client cet objet servira pour tous les transferts d information de ce client vers le serveur
Dans un client identifier la machine laquelle on veut se connecter et le numro de port sur lequel tourne le serveur implique de crer un socket pour cette communication
Ct client : pour envoyer une requte au serveur Ct serveur : pour envoyer une rponse au client 1 Crer un flux de sortie pour le socket pour crire linformation
2 Constituer le contenu des donnes mettre (transformer entiers, doubles, caractres, objets en lignes de texte)
Ct Serveur
Pour envoyer des informations au client Exemple dentre sortie
DataOutputStream : crire des types de donnes primitifs; output= new DataOutputStream(clientSocket.getOutputStream());
Ct Client
Ct client : pour envoyer une information au serveur Autre exemple dentre sortie
PrintStream pour afficher des valeurs des types de base (write et println)
Ct Serveur
Ct Client
Ct client : pour recevoir une rponse du serveur
DataInputStream : lire des lignes de texte, des entiers, des doubles,des caractres... ( read, readChar, readInt, readDouble, and readLine,. ) (writeBytes)
try {input = new DataInputStream(myClient.getInputStream());} catch (IOException e) {System.out.println(e);}
Le client doit il connatre la nature des E/S du serveur pour tre crit ?
Comment se dconnecter ?
Fermer correctement les flux dentre sortie et les sockets en cause. Ct client Ct serveur
Serveur Echo
Un serveur similaire echo ( port 7). Reoit un texte du client et le renvoie identique Le serveur gre un seul client.
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); }
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);} } }
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");
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);} }} }
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 ...
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 ...
TCP
setup
create socket, connect to hostid, port=x clientSocket = Socket() send request using clientSocket
Client
Plusieurs Clients
Utiliser des threads pour accepter plusieurs clients simultanment.
Le serveur gre un thread par client
Plusieurs clients
Client1 Serveur
Ouvrir connexion
application
Client2
S1 S2
application
Clientn Sn application
while (true) { accept a connection ; create a thread to deal with the client ; end while
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(); } }
travailler seuls
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, LDAP) : correspondances entre noms logiques et adresses IP (Annuaire) Port : canal ddi un service Protocole : langage utilis par 2 ordinateurs pour communiquer entre eux
Exemples d adresses
157.169.25.200
134.59.132.21 157.169.10.1
Ports rservs
1 1024 services fondamentaux (administrateurs) (sous unix cf. le fichier /etc/services, ypcat services) 1025 5000 disponibles pour les utilisateurs TCP
Serveur FTP : 21 Serveur Telnet : 23 Serveur SMTP : 25 UDP Agent SNMP : 161 Logger SNMP : 162 . Applications transactionnelles
Programmation Socket
Comment construire des applications client/server qui communiquent via les sockets
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
Lorsque le client cre le socket: le client TCP tablit une connexion avec le serveur TCP Lorsque le client le contacte le serveur TCP cre une nouvelle socket pour que le processus serveur communique avec le client Permet de parler avec plusieurs clients
TCP
setup
create socket, connect to hostid, port=x clientSocket = Socket() send request using clientSocket
Client
Plusieurs Clients
Utiliser des threads pour accepter plusieurs clients simultanment.
Le serveur gre un thread par client
Plusieurs clients
Client1 Serveur
Ouvrir connexion
application
Client2
S1 S2
application
Clientn Sn application
while (true) { accept a connection ; create a thread to deal with the client ; end while
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(); } }
Serveur
Client
req1 rep1
application
reqn repn
opration
read request from serverSocket write reply to serverSocket specifying client host address, port umber
Serveur
Client
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
La classe QuoteServer
socket = new DatagramSocket(4445);
Cration 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)
suite
contient une boucle qui tant quil y a des citations dans le fichier attend larrive d un DatagramPacket correspondant une requte client sur un DatagramSocket.
Byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet);
En rponse une citation est mise dans un DatagramPacket et envoye 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);
Suite
Adresse Internet + numro de port (issus du DatagramPacket ) = identification du client pour que le serveur puisse lui rpondre Larrive du DatagramPacket implique une requte ->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.
La classe QuoteClient
envoie une requte au QuoteServer, attend la rponse et affiche la rponse lcran. Variables utilises :
int port; InetAddress address; DatagramSocket socket = null; DatagramPacket packet; byte[] sendBuf = new byte[256];
Le client a besoin pour s excuter du nom de la machine sur laquelle tourne le serveur if (args.length != 1) {
System.out.println("Usage: java QuoteClient <hostname>"); return;
}
Le constructeur lie le Socket un port local libre Le programme envoie une requte 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);
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)
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)
Serveur
Client
req1 rep1
application
reqn repn
opration
read request from serverSocket write reply to serverSocket specifying client host address, port umber
Serveur
Client
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
La classe QuoteServer
socket = new DatagramSocket(4445);
Cration 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)
suite
contient une boucle qui tant quil y a des citations dans le fichier attend larrive d un DatagramPacket correspondant une requte client sur un DatagramSocket.
Byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet);
En rponse une citation est mise dans un DatagramPacket et envoye 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);
Suite
Adresse Internet + numro de port (issus du DatagramPacket ) = identification du client pour que le serveur puisse lui rpondre Larrive du DatagramPacket implique une requte ->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.
La classe QuoteClient
envoie une requte au QuoteServer, attend la rponse et affiche la rponse lcran. Variables utilises :
int port; InetAddress address; DatagramSocket socket = null; DatagramPacket packet; byte[] sendBuf = new byte[256];
Le client a besoin pour s excuter du nom de la machine sur laquelle tourne le serveur if (args.length != 1) {
System.out.println("Usage: java QuoteClient <hostname>"); return;
}
Le constructeur lie le Socket un port local libre Le programme envoie une requte 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);
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)
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)
travailler seuls
Client2
Gr
Clientn
Exemple de multicast
Un serveur de citation qui envoie une citation toutes les minutes tous les clients qui coutent (multicast)
Cration dun paquet dentre Attente de donnes en entre Rception et traitement des donnes en entre
Classe MulticastServer
Des constructeurs : par dfaut, port utiliser Des accesseurs en lecture : adresse du groupe (getInterface) Des mthodes : pour envoyer un paquet datagramme, pour joindre ou quitter un groupe (send, joinGroup, leaveGroup)
Multicast: MulticastSocket
Type de socket utilis ct client pour couter des paquets que le serveur broadcast plusieurs clients. . Une extension du QuoteServer : broadcast intervalle rgulier tous ses clients
Cur 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();}
Diffrences principales
Le DatagramPacket est construit partir de de ladresse de plusieurs clients L adresse et le no de port sont cbls
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".
Un nouveau Client
Pour couter le port 4446, le programme du client doit crer son MulticastSocket avec ce no. Pour tre membre du groupe "230.0.0.1" le client adresse la mthode joinGroup du MulticastSocket avec ladresse didentification du groupe. Le serveur utilise un DatagramSocket pour faire du broadcast partir de donnes 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 lcouter.
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();
Synthse
Client
I/O Stream I/O Stream
TCP connect
aDatagramSocket
Srialisation-Desrialisation
Enregistrer ou rcuprer des objets dans un flux
Persistance Transfert sur le rseau
Srialisation
Via la mthode writeObject()
Classe implmentant linterface OutputObject
Desrialisation
Via la mthode readObject()
Classe implmentant linterface InputObject Exemple : la classe InputObjectStream
Exception NotSerializableException
Interface Serializable
Ne contient pas de mthode -> enregistrement et rcupration de toutes les variables dinstances (pas de static)
+ informations sur sa classe (nom, version), type et nom des variables
2 classes compatibles peuvent tre utilises Objet rcupr = une copie de lobjet enregistr
Ajout dinformations lenregistrement, choix de srialisation Seulement pour les champs propres de la classe (hritage gr automatiquement)
Classe ClassLoader
ClassLoader est une classe abstraite. Un class loader est un objet responsable du chargement des classes Un nom de classe donn, il peut localiser ou gnrer les donnes qui constituent une dfinition de la classe. Chaque objet Class a une rfrence un ClassLoader qui le dfinit. Applications implmentent des sous classes de ClassLoader afin dtendre la faon de dynamiquement charger des classes par la VM. (utilisation de manager de scurit, par exemple)
ClassLoader ?
En UNIX la VM charge les classes partir des chemins dfinis dans CLASSPATH.
Certaines classes peuvent tre obtenues partir dautres sources, telles que le rseau ou construites par une application. La mthode defineClass convertit un tableau doctets en une instance de Class. Instances pouvant tre cres grce newInstance
Les mthodes et constructeurs crs par un class loader peuvent rfrencer dautres classes (loadClass du class loader de cette classe).
Chargement dynamique
Pour ne plus dployer les classes du serveur chez le client
Utilisation des chargeurs de classes qui tlchargent des classes depuis une URL Utilisation d un serveur Web qui fournit les classes
Ce que a change
Bien entendu, les classes et interfaces de l objet distant ne changent pas Le code du serveur ne change pas le client et la faon de le dmarrer sont modifis Et lancer un serveur Web pour nos classes
Mettre les classes Download dans le rpertoire des documents Web du serveur Web, accessibles via une URL
le chargeur de classes ira chercher les classes un emplacement de type http://www.class-server.com/classes/HelloWorldImpl_Stub.class
};
2) Lancer le serveur Web servant les fichiers de classes Download 3) Lancer le serveur (les classes Server doivent tre accessibles)
> java HelloWorldServer Cration de l'objet serveur... Rfrencement dans le RMIRegistry... Attente d'invocations - CTRL-C pour stopper
Le client doit bien connatre l'emplacement des classes afin de pouvoir les tlcharger
On va le lui prciser lors du lancement
> java -Djava.security.policy=client.policy -Djava.rmi.server.codebase=http://www.class-server.com:80/ HelloWorldClient
Exemple de programme
Class cls = Class.forName("method1"); Method methlist[] = cls.getDeclaredMethods(); for (int i = 0; i < methlist.length; i++) { Method m = methlist[i]; System.out.println("name = " + m.getName()); System.out.println("decl class = " + m.getDeclaringClass()); Class pvec[] = m.getParameterTypes(); for (int j = 0; j < pvec.length; j++) System.out.println("param #" + j + " " + pvec[j]); Class evec[] = m.getExceptionTypes(); for (int j = 0; j < evec.length; j++) System.out.println("exc #" + j + " " + evec[j]); System.out.println("return type = " + m.getReturnType());}
Exemple dexcution
public class method1 { private int f1(Object p, int x) throws NullPointerException {..} public static void main(String args[]) {.}
name = f1 decl class = class method1 param #0 class java.lang.Object param #1 int exc #0 class java.lang.NullPointerExcept return type = int name = main decl class = class method1 param #0 class java.lang.String
travailler seuls
1. Etendre java.io.FilterOutputStream pour crer un output stream pour ce type de Socket. Surcharge de mthodes si ncessaire. Le write doit compresser limage avant dcrire
2. Etendre java.io.FilterInputStream Le read doit dcompresser aprs avoir lu
3. Etendre java.net.Socket Implmenter les constructeurs appropris et surcharger getInputStream, getOutputStream et close. 4. Etendre java.net.ServerSocket Implmenter le constructeur et surcharger accept pour crer un socket du bon type.
Charsets : qui associent des dcodeurs et des encodeurs qui grent correctement les conversions chaines octets
liminent les problme de accent (caractres Unicode / UTF),
Channels : qui reprsentent des connexions entre entits avec de meilleures performances pour les oprations de lecture et dcriture Selectors et selection keys : associes aux selectable channels dfinissent des E/S multiplexes non bloquantes
vitent les threads
Le package Channel
SelectableChannel : canal qui peut tre multiplex DatagramChannel Un canal ddi aux communication UDP prises en charge par des sockets de type java.net.DatagramSocket ServerSocketChannel : Un canal ddi aux connexion TCP prises en charge par des sockets de type java.net.ServerSocket SocketChannel : Un canal ddi aux communication TCP prises en charge par des sockets de type java.net.Socket
Le package Channel
Et aussi Selector Un multiplexeur pour des SelectableChannel SelectionKey reprsentant un canal tiquet pour le multiplexage Pipe Deux canaux pour construire un pipe unidirectionnel (| shell)
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("USASCII"); private static CharsetEncoder encoder = charset.newEncoder(); // Direct byte buffer for writing private static ByteBuffer dbuf = ByteBuffer.allocateDirect(1024);
private static ServerSocketChannel setup() throws IOException { ServerSocketChannel ssc = ServerSocketChannel.open(); InetSocketAddress isa = new InetSocketAddress(InetAddress.getLocalHost(), port); ssc.socket().bind(isa); return ssc; }
Conclusion
Une large bibliothque pour traiter les sockets et diffrents types de communication entre Clients et Serveurs dans Java Une extension naturelle par abstraction lappel de mthodes distance - Java RMI
et une normalisation Corba avec lintgration dun ORB (cf aaplications rparties 2nd semestre)
et maintenant les EJB : Entreprise Java Beans
Exemple
CLIENT Essifun SERVEUR de Surnoms
oter
infrastructure
Protocole dapplication ?
EssiFun
enregistrer( paul , bug )
SERVEUR de Surnoms
marshalling 0111000101000..
unmarshalling
enregistrer( paul , bug ) = TRUE
unmarshalling
TRUE 101..
marshalling
Enregistrer(AnneMarie,AM) lister()
RMI
public interface Surnoms extends java.rmi.Remote { public Boolean enregistrer(String nom, String surnom) throws java.rmi.RemoteException, ServeurSurnoms.surnoms.ExisteDeja ; . }
Gnrateurs
Spcifications des donnes Gnrateurs RMIC / Orbix... IDL Int. Java
Fichiers gnrs
RMI
Classes et Interfaces
Machine locale InterfaceDistante Machine distante Remote
InterfaceDistante
Souche
Squelette
Appel mthode m()
ClasseLocale
ClasseDistante
client
registre
Il est ici
result stub
Envoyez le stub
Le voici result = objetDistant.m()
RMIRegistry + ClassLoader
client
serveur
Gnrateurs de Stubs
Spcifications des donnes Gnrateurs RPCGEN / MAVROS ASN1 XDR
Types de donnes C
Points communs
Protocol : transmission des requtes entre excutables Dispatching : gestion des threads Des services communs Services de nommage Interface repository .....
Restent approfondir
Introduction au Rseaux Locaux LANs Configuration carte rseau dune machine, Dveloppement dun analyseur de trafic
et standards IEEE 802 : IEEE 802.3 et Ethernet Configuration dun Firewall : IPTables,
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 Interoprabilit : XML une solution suffisante ?
travailler seuls
Questions prliminaires
Diffrences entre les protocoles de transport TCP et UDP ? Utilisation des adresses Internet ? Utilisation des ports ? Programmation sockets : avantages et inconvnients