Sie sind auf Seite 1von 189

Programmation Rseaux Illustration : Les Sockets en Java

Anne-Marie Dry

travailler seuls

Concepts gnraux Mise en uvre Java

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 : ? Serveur : ? Serveur de noms ? (DNS, LDAP) ?

Architecture client serveur


Mode de communication quun hte tablit avec un autre hte qui fournit un service quelconque Serveur

Client
application

send request send reply opration

protocole dapplication marshalling

Comment cela fonctionne au niveau du rseau


Identification de la machine qui abrite le serveur par le client Identification du serveur sur la machine Canal de communication entre le serveur et le client Construction de la trame rseau Echange du protocole dapplication

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

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 (ou BufferedReader)

Plus prcisment un socket


Plusieurs types de sockets : pour la communication par flot de donnes - fortement connecte - synchrone - type client-serveur pour communication rseau par message - en mode datagramme - en mode dconnect pour communication rseau par diffusion

Exemples dapplications
Un serveur dEcho Un exemple : le service SMTP

Demande de citations Diffusion de citations

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

Plusieurs hirarchies de classes

Des types de Sockets


Object

ServerSocket

DatagramSocket MulticastSocket

Socket

Des exceptions
Exception IOException SocketException ProtocolException UnknownHostException UnknownServiceException BindException ConnectException

Des Entres Sorties


Object

InputStream

OutputStream

FileInputStream ObjectInputStream FilterInputStream

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

Communication Client Serveur traditionnelle Fortement connecte

TCP

Flot de requtes du client vers le serveur


Point de vue application

TCP fournit un transfert fiable, conservant lordre de transfert des octets (pipe) entre le client et le serveur

Serveur

Client
application

Ouvrir connexion req1 req2 req3 reqn Fermer la connexion

opration

Interaction Client/server : socket TCP


create socket, port=x, for incoming request: welcomeSocket = ServerSocket() wait for incoming connection request connection connectionSocket = welcomeSocket.accept() read request from connectionSocket write reply to connectionSocket close connectionSocket

TCP

setup

create socket, connect to hostid, port=x clientSocket = Socket() send request using clientSocket

read reply from clientSocket close clientSocket

Serveur (sexcutant sur lhte)

Client

Scnario dun serveur pour un client

Crer le socket de communication avec le client


Attente de donnes sur le flux dentre Rception et Analyse des donnes en entre Calcul Construction de la rponse Ecriture sur le flux de sortie

Fermer le socket de communication

Scnario dun client


Crer le socket de connexion avec le serveur Attendre que la connexion soit tablie Rcuprer la socket de communication

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

Accepter les connexions Dans un serveur ?

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 serveur ? Accepter les connexions


ServerSocket myService; try { myService = new ServerSocket(PortNumber); } catch (IOException e) {System.err.println(e);} Cration dun objet socket pour couter et accepter les connexions des clients Socket clientSocket = null; try {clientSocket = myService.accept();} catch (IOException e) {System.err.println(e); }

Demander se Connecter = ouvrir un socket

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

Se connecter 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)

Comment envoyer une information ?

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)

PrintStream output; try {output = new PrintStream(myClient.getOutputStream();} catch (IOException e) {System.err.println(e);} ..

Comment recevoir de l information ?


Ct serveur : on doit lire la requte du client Ct client : on doit recevoir une rponse du serveur 1 Crer un flux d entre pour le socket et lire l information sur le flux 2 Reconstituer les donnes mises ( entiers, doubles, caractres, objets) partir des lignes de texte reues

Ct Serveur

pour recevoir les donnes dun client

DataInputStream input; try { input = new DataInputStream(clientSocket.getInputStream()); } catch (IOException e) {System.out.println(e);}

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

Autres entres sorties


echoSocket = new Socket( "jessica", 7); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader( echoSocket.getInputStream())); ATTENTION Le BufferedReader prend un Reader en paramtre et non un Stream Utilisation des ObjectInputStream et ObjectOutputStream Loutput doit tre initialis en premier sinon blocage la Cration du flux de sortie.

Entres sorties : comment procder ?


Quid du marshalling ? linformation qui est lue doit tre du mme type et du mme format que celle qui est crite ATTENTION au choix de vos entres sorties respecter la Cohrence des donnes transmises

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

Comment fermer un socket ?


Fermer les output et input stream avant le socket. Ct client output.close(); input.close(); myClient.close(); Ct serveur output.close(); input.close(); clientSocket.close(); myService.close();

Sockets (Communication Client serveur)


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

Comment crire un client ?


Toujours 4 tapes Ouvrir un socket. Ouvrir un input et un output stream sur le socket. Lire et crire sur le socket en fonction du protocole du serveur. Effacer Fermer

Seule ltape 3 change selon le serveur vis

Client SMTP (Simple Mail Transfer Protocol),


import java.io.*; import java.net.*; public class smtpClient { public static void main(String[] args) { Socket smtpSocket = null; // le socket client DataOutputStream os = null; // output stream DataInputStream is = null; // input stream try { smtpSocket = new Socket("hostname", 25); os = new DataOutputStream(smtpSocket.getOutputStream()); is = new DataInputStream(smtpSocket.getInputStream()); } catch (UnknownHostException e) { System.err.println("Don't know about host: hostname"); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: hostname"); }

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

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

Applications distribues et paralllisme


La communication ne doit pas rester bloque pour un client

Interaction Client/server : socket TCP


create socket, port=x, for incoming request: welcomeSocket = ServerSocket() wait for incoming connection request connection connectionSocket = welcomeSocket.accept() read request from connectionSocket write reply to connectionSocket close connectionSocket

TCP

setup

create socket, connect to hostid, port=x clientSocket = Socket() send request using clientSocket

read reply from clientSocket close clientSocket

Serveur (sexcutant sur lhte)

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

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.

Scnario du Serveur Multithread

while (true) { accept a connection ; create a thread to deal with the client ; end while

public class MultiServerThread extends Thread {


private Socket socket = null; public MultiServerThread(Socket socket) { super("MultiServerThread"); this.socket = socket; } public void run()
{ try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream())); } out.close(); in.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }

public class MultiServer {

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

Programmation Rseaux Illustration : Les Sockets en Java PARTIE 2


Anne-Marie Dry

travailler seuls

Concepts gnraux Mise en uvre Java

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 ?

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

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

Exemples d adresses Internet


157.169.9.15 157.169.20.5 157.169.20.4 157.169.25.201 157.169.10.222 157.169.4.50 157.169.10.120 157.169.10.240 157.169.1.20 157.169.25.110 157.169.1.153 157.169.3.204 157.169.1.155 157.169.10.2 oscar.essi.fr oscar accueil.essi.fr accueil compta.essi.fr compta www-local.essi.fr www-local pcprofs.essi.fr pcprofs ada.essi.fr ada macserver.essi.fr macserver demo.essi.fr demo bibli.essi.fr bibli sfe-srv.essi.fr sfe-srv sfe bde.essi.fr bde niv1a.essi.fr niv1a dessi.essi.fr dessi jessica.essi.fr jessica print2

ypcat hosts sous linux

Exemples d adresses
157.169.25.200
134.59.132.21 157.169.10.1

news-srv.essi.fr news-srv www.essi.fr www-srv.essi.fr news dolphin.unice.fr essi2.essi.fr loghost essi2

Essi : 157.169 I3S: 134.59 serveurs : 25 Administration : 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

Serveur multi processus

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

Programmation socket avec TCP


Le Client doit contacter le serveur Le processus serveur doit tre en train de sexcuter Le serveur doit avoir cr un socket qui devient le point dentre des clients Le Client contacte le serveur en Crant un socket TCP clientlocalement Spcifiant ladresse et le no de port number du processus serveur

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

Applications distribues et paralllisme


La communication ne doit pas rester bloque pour un client

Interaction Client/server : socket TCP


create socket, port=x, for incoming request: welcomeSocket = ServerSocket() wait for incoming connection request connection connectionSocket = welcomeSocket.accept() read request from connectionSocket write reply to connectionSocket close connectionSocket

TCP

setup

create socket, connect to hostid, port=x clientSocket = Socket() send request using clientSocket

read reply from clientSocket close clientSocket

Serveur (sexcutant sur lhte)

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

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.

Scnario du Serveur Multithread

while (true) { accept a connection ; create a thread to deal with the client ; end while

public class MultiServerThread extends Thread {


private Socket socket = null; public MultiServerThread(Socket socket) { super("MultiServerThread"); this.socket = socket; } public void run()
{ try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream())); } out.close(); in.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }

public class MultiServer {

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

Ce que RMI ne sait pas vraiment faire ?


Communication asynchrone par messages Communication par diffusion

Communication par message : Envoi de datagrammes

Serveur

Client
req1 rep1

application

reqn repn

opration

Programmation Socket avec UDP


UDP: pas de connexion entre le client et le serveur application viewpoint UDP fournit un transfert Pas de lien privilgi entre le non fiable de groupes doctets client et le serveur (datagrammes) entre un client et le serveur Lemetteur attache ladresse IP et le port pour le retour. Le serveur doit extraire ladresse IP et le port de lexpditeur partir du UDP: les donnes transmises peuvent tre datagramme reu reues dans le dsordre ou perdues

Client/server socket interaction: UDP


create socket, port=x, for incoming request: serverSocket = DatagramSocket() create socket, clientSocket = DatagramSocket() Create, address (hostid, port=x, send datagram request using clientSocket

read request from serverSocket write reply to serverSocket specifying client host address, port umber

read reply from clientSocket close clientSocket

Serveur

Client

Scnario dun serveur


Crer le socket d entre
Cration d un paquet d entre Attente de donnes en entre Rception et Analyse des donnes en entre Calcul Cration dun paquet de sortie Prparation et Envoi de la rponse Fermer le socket d entre

Scnario dun client


Crer le socket d entre
Crer un paquet de sortie Prparer et Envoyer une requte Crer un paquet dentre Attendre des donnes en entre les recevoir et les traiter

Fermer le socket d entre

Datagrammes UDP et Sockets


Datagramme = un message indpendant envoy sur le rseau arrive, temps darrive et contenu non garantis
2 classes : DatagramPacket et DatagramSocket packages dimplmentation de communication via UDP de datagrammes

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

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.

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.

Lorsque le serveur a lu toutes les citations on ferme le socket de communication.


socket.close();

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

La partie principale du main


Cration d un DatagramSocket
DatagramSocket socket = new DatagramSocket();

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

Ensuite le client rcupre une rponse et laffiche

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)

Communication asynchrone par messages Communication par diffusion

Communication par message : Envoi de datagrammes

Serveur

Client
req1 rep1

application

reqn repn

opration

Programmation Socket avec UDP


UDP: pas de connexion entre le client et le serveur application viewpoint UDP fournit un transfert Pas de lien privilgi entre le non fiable de groupes doctets client et le serveur (datagrammes) entre un client et le serveur Lemetteur attache ladresse IP et le port pour le retour. Le serveur doit extraire ladresse IP et le port de lexpditeur partir du UDP: les donnes transmises peuvent tre datagramme reu reues dans le dsordre ou perdues

Client/server socket interaction: UDP


create socket, port=x, for incoming request: serverSocket = DatagramSocket() create socket, clientSocket = DatagramSocket() Create, address (hostid, port=x, send datagram request using clientSocket

read request from serverSocket write reply to serverSocket specifying client host address, port umber

read reply from clientSocket close clientSocket

Serveur

Client

Scnario dun serveur


Crer le socket d entre
Cration d un paquet d entre Attente de donnes en entre Rception et Analyse des donnes en entre Calcul Cration dun paquet de sortie Prparation et Envoi de la rponse Fermer le socket d entre

Scnario dun client


Crer le socket d entre
Crer un paquet de sortie Prparer et Envoyer une requte Crer un paquet dentre Attendre des donnes en entre les recevoir et les traiter

Fermer le socket d entre

Datagrammes UDP et Sockets


Datagramme = un message indpendant envoy sur le rseau arrive, temps darrive et contenu non garantis
2 classes : DatagramPacket et DatagramSocket packages dimplmentation de communication via UDP de datagrammes

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

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.

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.

Lorsque le serveur a lu toutes les citations on ferme le socket de communication.


socket.close();

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

La partie principale du main


Cration d un DatagramSocket
DatagramSocket socket = new DatagramSocket();

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

Ensuite le client rcupre une rponse et laffiche

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)

Programmation Rseaux Illustration : Les Sockets en Java PARTIE 3


Anne-Marie Dry

travailler seuls

Concepts gnraux Mise en uvre Java

Communication par diffusion : Multicast


Client1 Serveur

Client2

Gr

Clientn

Ouvrir un socket = demander se Connecter

Les clients demandent seulement joindre un groupe

Exemple de multicast

Un serveur de citation qui envoie une citation toutes les minutes tous les clients qui coutent (multicast)

Scnario dun serveur


Crer le socket dentre

Crer un paquet de sortie Prparer et Envoyer une donne

Fermer le socket dentre

Scnario dun client


Crer le socket dentre

Cration dun paquet dentre Attente de donnes en entre Rception et traitement des donnes en entre

Fermer le socket d 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

Serveur aServerSocket read write


aDatagramPacket

TCP connect

aSocket write read

UDP aDatagramSocket non connect send receive Multicast aMulticastSocket receive

aDatagramSocket

receive send aDatagramSocket/ aMulticastSocket send

Quelques Informations utiles sur la srialisation Java

Srialisation-Desrialisation
Enregistrer ou rcuprer des objets dans un flux
Persistance Transfert sur le rseau

Srialisation
Via la mthode writeObject()
Classe implmentant linterface OutputObject

Exemple : la classe OutputObjectStream


Srialisation dun objet -> srialisation de tous les objets contenus par cet objets
Un objet est sauv quune fois : cache pour les listes circulaires

Desrialisation
Via la mthode readObject()
Classe implmentant linterface InputObject Exemple : la classe InputObjectStream

Exception NotSerializableException

Si la classe de lobjet sauv


Ntend ni linterface Java Serializable Ni linterface Java Externalizable

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

Gestion de la srialisation desrialisation


Implmenter les mthodes
private void writeObject(OutputObjectStream s) throws IOException private void readObject(OutputInputStream s) throws IOException

defaultReadObject() et defaultWriteObject() mthodes par dfaut

Ajout dinformations lenregistrement, choix de srialisation Seulement pour les champs propres de la classe (hritage gr automatiquement)

Gestion complte de la srialisation desrialisation : utiliser Externalizable


Graphe dhritage complet Implmenter les mthodes
public void writeExternal(ObjectOutput o) throws IOException public void readExternal(ObjectInput o) throws IOException
ATTENTION PBM de SECURITE

Un peu plus de rflexivit

Les ClassLoader ????

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

Exemple de chargement de classe


Un class loader qui permet de charger des fichiers de classes via le rseau
ClassLoader loader=new NetworkClassLoader(host,port); Object main= loader.loadClass("Main", true).newInstance(); . NetworkClassLoader doit dfinir findClass et loadClassData pour charger et defineClass pour crer une instance de Class.

Utilit et utilisation RMI

Chargement dynamique des classes


Problme de scurit
Le programme client tlcharge du code sur le rseau Ce code pourrait contenir des virus ou effectuer des oprations non attendues !!! Utilisation d un gestionnaire de scurit pour les applications de clients RMI Possibilit de crer des gestionnaires de scurit personnaliss pour des applications spcifiques RMI fournit des gestionnaires de scurit suffisants pour un usage classique

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

Hello World : chargement dynamique


Sparation des classes
Serveur (fichiers ncessaires a l'excution du serveur)
HelloWorldServer.class HelloWorldImpl.class HelloWorld.class HelloWorldImpl_Stub.class

Download (fichiers de classes charger dans le programme client)


HelloWorldImpl_Stub.class

Client (fichiers ncessaires au dmarrage du client)


HelloWorld.class HelloWorldClient.class

Hello World : Dmarrage du serveur Web

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

Hello World : Politiques de scurit


Le programme Java client doit pouvoir se connecter aux ports de la base de registres RMI et des implmentations des objets de serveur, ainsi qu'au port du serveur Web Fichier client.policy
grant { permission java.net.SocketPermission "*:1024-65535", "connect,resolve"; permission java.net.SocketPermission "*:80", "connect"; };

Hello World : gestionnaire de scurit RMI


Le client intgre un gestionnaire de scurit RMI pour les stubs tlchargs dynamiquement
import java.rmi.*; import java.rmi.server.*; public class HelloWorldClient { public static void main(String[] args) { try { // Installe un gestionnaire de scurit RMI System.setSecurityManager(new RMISecurityManager()); System.out.println("Recherche de l'objet serveur..."); HelloWorld hello = (HelloWorld)Naming.lookup("rmi://server/HelloWorld"); System.out.println("Invocation de la mthode sayHello..."); String result = hello.sayHello(); System.out.println("Affichage du rsultat :"); System.out.println(result); } catch(Exception e) { e.printStackTrace(); } } }

Hello World : Dmarrage cot serveur


1) Lancer la base de registres RMI (elle doit pouvoir accder aux classes Download - CLASSPATH)
> rmiregistry

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

Hello World : Dmarrage cot client


Le client doit pouvoir se connecter des machines distantes pour la base de registres RMI, les objets de serveur ainsi que le serveur Web
On doit lui fournir un fichier client.policy

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

Les mthodes dune classe ?


1. rcuprer l objet Class que lon souhaite observer, 2. rcuprer la liste des objets Method par getDeclaredMethods : mthodes dfinies dans cette classe (public, protected, package, et private) getMethods permet dobtenir aussi les informations concernant les mthodes hrites 3. A partir des objets mthodes il est facile de rcuprer : les types de paramtres, les types dexception, et le type de largument retourn sous la forme dun type fondamental ou dun objet classe.

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

Programmation Rseaux Illustration : Les Sockets en Java PARTIE 4


Anne-Marie Dry

travailler seuls

Concepts gnraux Mise en uvre Java

Dfinir un nouveau type de socket


Pourquoi ? Prparer les donnes avant de les envoyer Reconstruire les donnes reues Exemple Java RMI Sockets spcialises (marshalling et unmarshalling) Exemple Images : Compression et Dcompression

Comment ? En spcialisant les classes de base

Comment Dfinir un nouveau type de Sockets


La classe CompressionSocket et ses classes relatives 4 tapes Communication TCP Dfinir des E/S Spcifiques

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

Comment Dfinir un nouveau type de Sockets


La classe CompressionSocket et ses classes relatives 4 tapes

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.

Un nouveau Package : java.nio


Les principales nouveauts de cette API sont : Buffers : qui explicitent la notion de buffers containers de donnes
Amliorent les problme de bufferisation lies aux E/S

Charsets : qui associent des dcodeurs et des encodeurs qui grent correctement les conversions chaines octets
liminent les problme de accent (caractres Unicode / UTF),

Un nouveau Package : java.nio

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)

Les nouvelles sockets


Ce package dfinit 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 mthode statique open dfinie dans chaque classe. La socket est cre par egget de bord.

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

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

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

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

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

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

Retour sur RMI

Exemple
CLIENT Essifun SERVEUR de Surnoms

oter
infrastructure

Protocole dapplication ?

Communication client serveur


CLIENT Connexion au serveur Prparation de la requte Envoi de la requte Attente du rsultat . SERVEUR Attente de requtes Analyse de la requte .. Excution . Prparation de la rponse Envoi de la rponse

Analyse du rsultat reu

Exemple : annuaire des surnoms


1:Paul:bug ou ENR/nPaul/n/bug/n ou Objet Requte Seriablizable

EssiFun
enregistrer( paul , bug )

SERVEUR de Surnoms

marshalling 0111000101000..

unmarshalling
enregistrer( paul , bug ) = TRUE

unmarshalling
TRUE 101..

marshalling

Diffrence entre un transport TCP et UDP pour le codage des donnes ?

Que peut on automatiser ?

Au minimum, la phase de marshalling/unmarshalling (htrogneit des langages, des systmes, etc)


Selon les cas, le squelette du serveur les appels distants du client

Exemple : annuaire des surnoms et RMI


AnnuaireEssi listePersonnes

Enregistrer(AnneMarie,AM) lister()

enregistrer lister oter

Exemple : annuaire des surnoms


interface : partie visible de lobjet (enregistrer, oter, lister, ) implmentation : partie prive inaccessible depuis dautres objets (listePersonnes : un vecteur de Personne ou un tableau ou .) interface = contrat entre lobjet et le monde extrieur (save impossible par exemple)

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

Stubs Skeletons Proxy


(mise en uvre de la srialisation et dsrialisation)

RMI

Classes et Interfaces
Machine locale InterfaceDistante Machine distante Remote

InterfaceDistante

Souche

Squelette
Appel mthode m()

Appel mthode m()

ClasseLocale

ClasseDistante

Interaction Client Enregistreur


Lookup : o est objetDistant ?

client

registre

Il est ici
result stub

Envoyez le stub
Le voici result = objetDistant.m()

stub squelette objet Distant

RMIRegistry + ClassLoader

client

serveur

Exemple : annuaire des surnoms


ASN.1 et norme ISO
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

Gnrateurs de Stubs
Spcifications des donnes Gnrateurs RPCGEN / MAVROS ASN1 XDR

Fichiers Types de gnrs donnes C Lisp Java

Librairie marshalling et unmarshalling squelettes du client et du serveur

Types de donnes C

Les points communs des approches distribues


Adressage : tout serveur (objet ou programme) doit tre affect une rfrence unique Transport : pour tablir une communication entre 2 nuds et transmettre une requte Marshalling : transformation de la requte pour passer sur le rseau

Points communs
Protocol : transmission des requtes entre excutables Dispatching : gestion des threads Des services communs Services de nommage Interface repository .....

Restent approfondir

Communication rseaux et Internet


Couches de transport Diffrences entre UDP et TCP (Dveloppement dun serveur multicast Ack/NoAck pour grer 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 rseau

Spcificits des Rseaux Locaux

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,

Heureusement Dino est l :-)

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 ?

Heureusement Mireille est l

Programmation Rseaux Quavez-vous retenu ?


Anne-Marie Dry

travailler seuls

Concepts gnraux Mise en uvre Java

Questions prliminaires
Diffrences entre les protocoles de transport TCP et UDP ? Utilisation des adresses Internet ? Utilisation des ports ? Programmation sockets : avantages et inconvnients

Lien Types de Socket - Couche de transport

Des entres sorties : Pourquoi ?

Diffrences UDP -TCP

Diffrences Protocole dapplication marshalling

Quand doit on utiliser des threads ?

Diffrences Sockets Java - C

Apports du package nio

Protocole dapplication RMI

Avantages Inconvnients RMI Socket

Diffrence dploiement statique dynamique

Impact de la Srialisation dobjets Java sur la communication

Rflexivit Java o et pourquoi ?

Das könnte Ihnen auch gefallen