98
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 Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java

Embed Size (px)

Citation preview

Page 1: Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre 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 Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java

Exemples d ’applications

ClassiquesServeur de MessagesServeur de news SocketsServeur de fichiers

Applications distribuées RMIRéservation de voyagesServeurs de vente

Composants distribués…. EJBs

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

De RMI aux Sockets

Les stubs en RMI gèrentla communication RéseauxLe transfert de données sur le réseau

oui mais COMMENT ?

Et pourquoi RMI n’est pas toujours satisfaisant ???

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

Stubs et encodage des paramètres

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

RMI Architecture client serveur

Mode de communication qu’un hôte établit avec un autre hôtequi fournit un service quelconque

applicationopération

Client

Serveur

send request

send reply

« protocole d’application » 

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

Comment cela fonctionne au niveau du réseau

• Rôle du stub – 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 réseau– Echange du protocole d’application

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

Besoins d’une application Client-Serveur

Similitudes avec un appel téléphonique via un standard1. Trouver l’adresse du serveur : trouver le no de téléphone de l’entreprise2. Demander un service spécifique : s’adresser à un service ou une personne précise de l’entreprise (no de poste)3. Faire la requête 4. Obtenir une réponse

Adresse d’un serveur ?Identification d’un service ?

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

Un peu de vocabulaire

Client : entité qui fait l ’appelSockets : moyen de communication entre ordinateursAdresses IP : adresse d’un ordinateurServeur : entité qui prend en charge la requêteServeur de noms (DNS, LDAP) : correspondances entre noms logiques et adresses IP (Annuaire)Port : canal dédié à un serviceProtocole : langage utilisé par 2 ordinateurs pour communiquer entre eux

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

Adresse Internet et Port

Adresse internet attribuée à chaque nœud du réseausérie d ’octets dont la valeur dépend du type de réseauassociée à un nom logique (Domain Name Server)

Chaque hôte possède environ 65535 ports

Port canal dédié à un service spécifique80 pour le service http25 pour le service SMTPTCP implique une file d’attente par connexionUDP implique une file d’attente unique pour le port

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

Exemples d ’adresses Internet

ypcat hosts sous linux

157.169.9.15 oscar.essi.fr oscar157.169.20.5 accueil.essi.fr accueil157.169.20.4 compta.essi.fr compta157.169.25.201 www-local.essi.fr www-local157.169.10.222 pcprofs.essi.fr pcprofs157.169.4.50 ada.essi.fr ada157.169.10.120 macserver.essi.fr macserver157.169.10.240 demo.essi.fr demo157.169.1.20 bibli.essi.fr bibli157.169.25.110 sfe-srv.essi.fr sfe-srv sfe157.169.1.153 bde.essi.fr bde157.169.3.204 niv1a.essi.fr niv1a157.169.1.155 dessi.essi.fr dessi157.169.10.2 jessica.essi.fr jessica print2

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

Exemples d ’adresses

157.169.25.200 news-srv.essi.fr news-srv www.essi.fr www-srv.essi.fr news134.59.132.21 dolphin.unice.fr157.169.10.1 essi2.essi.fr loghost essi2

Essi : 157.169I3S: 134.59serveurs : 25Administration : 1…….

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

Ports réservés

TCPServeur FTP : 21Serveur Telnet : 23Serveur SMTP : 25

UDPAgent SNMP : 161Logger SNMP : 162….

Serveur multi processus Applications transactionnelles

1 à 1024 services fondamentaux (administrateurs)(sous unix cf. le fichier /etc/services, ypcat services)1025 à 5000 disponibles pour les utilisateurs

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

Sockets ?

Outil de communication pour échanger des données entre un client et un serveur

Canaux de communication (descripteur d’entrée sortie dans lesquels on écrit et sur lesquels on lit)Gestion similaire des entrées sorties standard (écran, clavier) etdes fichiers

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

Un socket : une entrée sortie dédiée au réseau

Gestion similaire des entrées sorties standard (écran, clavier) etdes fichiers

En sortie (ex. System.out) : java.io.PrintStream (ou PrintWriter)

utilise un flot dirigé vers une sortie java.io.OutputStream

En entrée (ex. System.in) : java.io.InputStream (ou BufferedReader)

ATTENTION aux méthodes deprecated

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

Plus précisément un socket

Plusieurs types de sockets :pour la communication par flot de données

- fortement connectée - synchrone - type client-serveur

pour communication réseau par message - en mode datagramme - en mode déconnecté

pour communication réseau par diffusion

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

Contexte : modèle OSI

Couche Transport pour transporter les données en mode connecté : Transmission Control Protocolen mode déconnecté : User Datagram Protocol

Mode connecté vs mode non connecté

rester en ligne pour demander plusieurs services ou rappeler l’entreprise pour chaque nouvelle requête

Couche communication pour connecter 2 machines distantes :Internet Protocol

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

Exemples d’applications

• Un exemple : le service SMTP

• Un serveur d’Echo

• Gestion simultanément de plusieurs clients ( ligne non occupée)

• Demande de citations : une communication à base de messages

• Diffusion de citations : Communication Multicast (réunion téléphonique)

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

Sockets en Java ?

BSD sockets UNIXau dessus de TCP ou UDP

En Java toutes les classes relatives aux socketssont dans le package java.net

Une infrastructure puissante etflexible pour la programmation réseau

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

Le Package net

• Des Exceptions• Des entrées Sorties• Des Sockets• …...

Plusieurs hiérarchies de classes

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

Des types de Sockets

ServerSocket

HttpAwareServerSocket

DatagramSocket

MulticastSocket

Socket

HttpSendSocket WrappedSocket

Object

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

Des exceptionsException

IOException

SocketException ProtocolException UnknownHostException UnknownServiceException

BindException ConnectException

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

Des Entrées Sorties

Object

InputStream

FileInputStream

SocketInputStream

OutputStream

FileOutputStream

SocketOutputStream

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

Autres Classes

Object

InetAdress DatagramPacket SocketImpl

PlainSocketImpl

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

Java.net.InetAddress : nommage

La classe InetAddress

2 constructeurs : un par défaut qui crée une adresse vide (cf la méthode accept sur Socket)

un qui prend le nom de la machine hôte et l’adresse IP de la machine.

Des accesseurs en lecture : pour récupérer l’adresse IP d’une machine (getByName, getAllByName), des informations sur lamachine hôte (getLocalHost, getLocalAddress, getLocaName)Des comparateurs : égalité (equals) et type d’adresse (isMulticastAddress)…..

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

Les sockets « pour RMI »

Communication Client Serveur traditionnelle

Fortement connectée

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

Flot de requêtes du client vers le serveur

applicationopération

Client

Serveur

Ouvrir connexionreq1req2req3

reqn

Fermer la connexion

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

Scénario d’un serveur

Attente de données sur le flux d ’ entréeRéception et Analyse des données en entréeCalculConstruction de la réponseEcriture sur le flux de sortie

Fermer le socket d ’entrée

Créer le socket d  ’entrée

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

Scénario d’un client

Préparer la requêtel ’envoyer sur le flux de sortieAttendre des données sur le flux d ’ entrée les lire et les traiter

Fermer le socket d ’entrée

Créer le socket d ’entrée

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

Socket programming

Socket API• introduced in BSD4.1 UNIX, 1981• explicitly created, used, released

by apps • client/server paradigm • two types of transport service via

socket API: – unreliable datagram – reliable, byte stream-oriented

a host-local, application-created/own

ed, OS-controlled interface (a “door”) into which

application process can both send and

receive messages to/from another (remote

or local) application

process

socket

Goal: learn how to build client/server application that communicate using sockets

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

Client/server socket interaction: TCP

wait for incomingconnection requestconnectionSocket =welcomeSocket.accept()

create socket,port=x, forincoming request:welcomeSocket =

ServerSocket()

create socket,connect to hostid, port=xclientSocket =

Socket()

closeconnectionSocket

read reply fromclientSocket

closeclientSocket

Server (running on hostid) Client

send request usingclientSocketread request from

connectionSocket

write reply toconnectionSocket

TCP connection setup

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

TCP et Sockets

2 classes : Socket et ServerSocket (java.net package)

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

Transfert de données

Connexion + Marshalling

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

Ouvrir un socket = demander à se Connecter

Dans un clientidentifier la machine à laquelle on veut se

connecter et le numéro de port sur lequel tourne le serveur

implique de créer un socket pour cette communication

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

Comment ouvrir un socket ? Se connecter

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)

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

Dans un serveur ?Accepter les connexions

Créer un objet socket pour écouter les demandes de connexionsur le numéro de port associé au service

Créer un objet socket pour accepter une connexion d ’un clientcet objet servira pour tous les transferts d ’information de

ce client vers le serveur

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

Dans un serveur ?Accepter les connexions

ServerSocket myService; try { myService = new ServerSocket(PortNumber); } catch (IOException e) {System.err.println(e);}

Création d’un objet socket pour écouter et accepter les connexions des clients

Socket clientSocket = null; try {clientSocket = myService.accept();} catch (IOException e) {System.err.println(e); }

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

Comment recevoir de l ’information ?

Côté client : on doit recevoir une réponse du serveurCôté serveur : on doit lire la requête du client

1 Créer un flux d ’entrée pour le socket et lire l ’information sur le flux

2 Reconstituer les données émises ( entiers, doubles, caractères, objets)à partir des lignes de texte reçues

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

Créer un Input Stream?

Côté client : pour recevoir une réponse du serveur

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

DataInputStream : lire des lignes de texte, des entiers, desdoubles,des caractères... ( read, readChar, readInt, readDouble, and readLine,. )

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

Côté Serveur

pour recevoir les données d’un client

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

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

Comment envoyer une information ?

Côté client : pour envoyer une requête au serveur Côté serveur : pour envoyer une réponse au client

1 Créer un flux de sortie pour le socket pour écrire l’information

2 Constituer le contenu des données à émettre (transformer entiers, doubles, caractères, objets en lignes de texte)

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

Comment créer un Output Stream?

Côté client : pour envoyer une information au serveur (PrintStream ou DataOutputStream)

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

PrintStream pour afficher des valeurs des types de base(write et println)

…..

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

Côté Serveur

Pour envoyer des informations au clientPrintStream output; try {output = new PrintStream(clientSocket.getOutputStream()); } catch (IOException e) {System.out.println(e);}

DataOutputStream : écrire des types de données primitifs; (writeBytes…)output=new DataOutputStream(clientSocket.getOutputStream());

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

Comment se déconnecter ?

Fermer correctement les flux d’entrée sortie et les sockets en cause. Côté clientCôté serveur

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

Comment fermer un socket ?

Fermer les output et input stream avant le socket. Côté client

output.close(); input.close(); myClient.close();Côté serveur output.close(); input.close(); clientSocket.close(); myService.close();

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

Comment écrire un client ?

Toujours 4 étapesOuvrir 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 l’étape 3 change selon le serveur visé

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

Sockets (Communication Client serveur)

Le serveur connecte le client sur un nouveau no de portet reste en attente sur le port original

Client et serveur communiquent en écrivant et lisant sur un socket

Le serveur est à l’écoute des requêtes sur un port particulierUn client doit connaître l’hôte et le port sur lequel le serveur écoute. Le client peut tenter une connexion au serveur

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

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

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

Le protocole SMTP, RFC1822/3

if (smtpSocket != null && os != null && is != null) { try{os.writeBytes("HELO\n"); os.writeBytes("MAIL From: [email protected]\n"); os.writeBytes("RCPT To: [email protected]\n"); os.writeBytes("DATA\n"); os.writeBytes("From: [email protected]\n"); os.writeBytes("Subject: Qui est là ?\n"); os.writeBytes("Vous suivez toujours ?\n"); // message os.writeBytes("\n.\n"); os.writeBytes("QUIT");

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

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

.

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

Serveur Echo

Un serveur similaire à echo ( port 7). Reçoit un texte du client et le renvoie identiqueLe serveur gère un seul client.

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

Déclarations

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

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

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

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

TCP et Sockets

La classe Socket :

une batterie de constructeurs : par défaut,no de port + adresse / nom de machine et service distante,+ no de port + adresse locale,créent 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 associés (getPort, getInetAddress, getLocalPort, getLocalAddress, getInputStream, getOutputStream…)

des méthodes : close...

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

TCP et Sockets

La classe ServerSocket

des constructeurs : par défaut,no de port associé, + taille de la liste de clients en attente +adresse...

des accesseurs en lecture : no de port sur lequelle socket écoute, adresse à laquelle il est connecté (getPort, getInetAddress, …)

des méthodes : accept pour accepter une communication avec un client, close...

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

Applications distribuées et parallèlisme

La communication ne doit pas rester bloquée pour un client

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

Plusieurs clients

application

Clientn

ServeurOuvrir connexion

application

Client1

application

Client2 S1

S2

Sn

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

Plusieurs Clients

Utiliser des threads pour accepter plusieurs clients simultanément.

Le serveur gère un thread par client

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

Quelques mots sur les ThreadsUn thread permet l’exécution d’un programme. Une application peut avoir de multiples threads qui s ’exécutentconcurremment (Chaque thread a une priorité). Chaque thread a un nom. Plusieurs threads peuvent avoir lemême. Le nom est généré si non spécifié. Il y a 2 façons de créer un nouveau thread d’exécution.

déclarer une sous classe de Thread et surchargerla méthode run. Une instance de la sous classe peut alorsêtre allouée et démarrer.

déclarer une classe qui implémente Runnable et doncla méthode run. Une instance de la classe peut être allouée, passée comme argument à la création d’un threadet démarrée.

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

Un thread qui calcule des primes

class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }

PrimeThread p = new PrimeThread(143); p.start();

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

Version2 class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }

PrimeRun p = new PrimeRun(143); new Thread(p).start();

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

Ce que RMI ne sait pas vraiment faire ?

Communication asynchrone par messages

Communication par diffusion

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

Communication par message : Envoi de datagrammes

applicationopération

Client

Serveur

req1rep1

reqnrepn

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

Exemple

Un serveur de citation qui écoute un socket type datagram et envoie une citation si le client le demandeUn client qui fait simplement des requêtes au serveur

ATTENTION Plusieurs firewalls et routeurs sont configurés pour interdire le passage de paquets UDP

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

Scénario d’un serveur

Création d ’un paquet d ’entréeAttente de données en entréeRéception et Analyse des données en entrée CalculCréation d’un paquet de sortiePréparation et Envoi de la réponse

Fermer le socket d ’entrée

Créer le socket d ’entrée

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

Scénario d’un client

Créer un paquet de sortiePréparer et Envoyer une requête Créer un paquet d ’entréeAttendre des données en entrée les recevoir et les traiter

Fermer le socket d ’entrée

Créer le socket d ’entrée

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

Socket programming with UDP

UDP: no “connection” between client and server

• no handshaking• sender explicitly attaches IP

address and port of destination

• server must extract IP address, port of sender from received datagram

UDP: transmitted data may be received out of order, or lost

application viewpoint

UDP provides unreliable transfer of groups of bytes (“datagrams”)

between client and server

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

Client/server socket interaction: UDP

closeclientSocket

Server (running on hostid)

read reply fromclientSocket

create socket,clientSocket = DatagramSocket()

Client

Create, address (hostid, port=x,send datagram request using clientSocket

create socket,port=x, forincoming request:serverSocket = DatagramSocket()

read request fromserverSocket

write reply toserverSocketspecifying clienthost address,port umber

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

Datagrammes UDP et Sockets

2 classes : DatagramPacket et DatagramSocket

Datagramme = un message indépendant envoyé sur le réseau arrivée, temps d’arrivée et contenu non garantis

packages d’implémentation de communication via UDP de datagrammes

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

Une Application Client Serveur

Le serveur reçoit en continu des paquets mode datagramme sur un socketun paquet reçu = une demande de citation d’un client le serveur envoie en réponse un paquet qui contient

une ligne "quote of the moment"

L’application cliente envoie simplement un paquetdatagramme au serveur indiquant qu’il souhaiterecevoir une citation et attend en réponse un paquetdu serveur.

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

La classe QuoteServer

import java.io.*;public class QuoteServer { public static void main(String[] args) throws IOException { new QuoteServerThread().start(); } }

la classe QuoteServerThread implémente toute la logique du serveur.

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

La classe QuoteServerThread

public QuoteServerThread() throws IOException { this("QuoteServer"); }public QuoteServerThread(String name) throws IOException { super(name); socket = new DatagramSocket(4445);Création d’un DatagramSocket sur le port 4445 qui permet au serveurde 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 contientune liste de citations ( une citation par ligne)

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

La méthode RUNimplémentation du thread

contient une boucle qui tant qu’il y a des citations dans le fichierattend l’arrivée d ’un DatagramPacket correspondant à une requête client sur un DatagramSocket.

Byte[] buf = new byte[256];DatagramPacket packet = new DatagramPacket(buf, buf.length);socket.receive(packet);

En réponse une citation est mise dans un DatagramPacket et envoyée sur leDatagramSocket 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);

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

Suite

Adresse Internet + numéro de port (issus du DatagramPacket )= identification du client pour que le serveur puisse lui répondre

L’arrivée du DatagramPacket implique une requête ->contenu du buffer inutile

Le constructeur utilisé pour le DatagramPacket : un tableau d’octets contenant le message et la taille du tableau

+ L’adresse Internet et un no de port.

Lorsque le serveur a lu toutes les citationson ferme le socket de communication. socket.close();

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

La classe QuoteClient

envoie une requête au QuoteServer, attend la réponse et affiche la réponse à l’écran.

Variables utilisées : int port; InetAddress address; DatagramSocket socket = null; DatagramPacket packet; byte[] sendBuf = new byte[256];Le client a besoin pour s ’exécuter du nom de la machine sur laquelle tourne le serveurif (args.length != 1) { System.out.println("Usage: java QuoteClient <hostname>"); return; }

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

La partie principale du main

Création d ’un DatagramSocketDatagramSocket socket = new DatagramSocket();

Le constructeur lie le Socket à un port local libre Le programme envoie une requête 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 récupère une réponse et l’affiche

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

Classe DatagramSocket

Des constructeurs : par défaut, + 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 reçu ou envoyé (getInetAddress, getLocalAddress, getPort, getLocalPort, getReceivedBufferSize, getSendBufferSize…)

Des méthodes : pour se connecter à une adresse, pour sedéconnecter, pour envoyer un paquet datagramme, pour un recevoir un paquet datagramme (connect, disconnect, send, receive)

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

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 donnée transmise (getAddress, getPort, getData, getLength…)

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

• Petite comparaison UDP TCP

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

Services provided by Internet transport protocols

TCP service:• connection-oriented: setup

required between client, server

• reliable transport between sending and receiving process

• flow control: sender won’t overwhelm receiver

• congestion control: throttle sender when network overloaded

• does not providing: timing, minimum bandwidth guarantees

UDP service:• unreliable data transfer

between sending and receiving process

• does not provide: connection setup, reliability, flow control, congestion control, timing, or bandwidth guarantee

Q: why bother? Why is there a UDP?

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

Transport service requirements of common apps

Application

file transfere-mail

Web documentsreal-time audio/video

stored audio/videointeractive games

financial apps

Data loss

no lossno lossloss-tolerantloss-tolerant

loss-tolerantloss-tolerantno loss

Bandwidth

elasticelasticelasticaudio: 5Kb-1Mbvideo:10Kb-5Mbsame as above few Kbps upelastic

Time Sensitive

nononoyes, 100’s msec

yes, few secsyes, 100’s msecyes and no

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

Internet apps: their protocols and transport protocols

Application

e-mailremote terminal access

Web file transfer

streaming multimedia

remote file serverInternet telephony

Applicationlayer protocol

smtp [RFC 821]telnet [RFC 854]http [RFC 2068]ftp [RFC 959]proprietary(e.g. RealNetworks)NSFproprietary(e.g., Vocaltec)

Underlyingtransport protocol

TCPTCPTCPTCPTCP or UDP

TCP or UDPtypically UDP

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

Communication par diffusion : Multicast

application

Clientn

Serveur

application

Client1

application

Client2

Gr

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

Ouvrir un socket = demander à se Connecter

Les clients demandent seulement à joindre un groupe

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

Exemple de multicast

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

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

Créer un paquet de sortiePréparer et Envoyer une donnée

Scénario d’un serveur

Fermer le socket d ’entrée

Créer le socket d ’entrée

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

Scénario d’un client

Création d ’un paquet d ’entréeAttente de données en entréeRéception et traitement des données en entrée

Fermer le socket d ’entrée

Créer le socket d ’entrée

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

Classe MulticastServer

Des constructeurs : par défaut, port à utiliser

Des accesseurs en lecture : adresse du groupe (getInterface…)

Des méthodes : pour envoyer un paquet datagramme, pour joindre ou quitter un groupe (send, joinGroup, leaveGroup)

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

Multicast: MulticastSocket

Type de socket utilisé côté client pour écouter des paquets quele serveur « broadcast » à plusieurs clients. .

Une extension du QuoteServer : broadcast à intervalle régulier à tous ses clients

Le serveur a un nouveau nom et crée un MulticastServerThreadqui contient le cœur du serveur.

import java.io.*; public class MulticastServer { public static void main(String[] args) throws IOException { new MulticastServerThread().start(); } }

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

public class MulticastServerThread extends QuoteServerThread { ... }

utilisation du constructeur par héritage et héritage de variables et de la méthode getNextQuote

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

Une nouvelle méthode RUN

public void run() { 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();}

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

Différences principales

Le DatagramPacket est construit à partir de de « l’adresse de plusieurs clients »

L ’adresse et le no de port sont câblés

no de port 4446 (tout client doit avoir un MulticastSocket lié à ce no). L’adresse InetAddress "230.0.0.1" correspond à un identificateur de groupe et non à une adresse Internet de la machine d’un client

Le DatagramPacket est destiné à tous les clients qui écoutent le port 4446 et qui sont membres du groupe "230.0.0.1".

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

Un nouveau Client

Pour écouter le port 4446, le programme du client doit créer son MulticastSocket avec ce no. Pour être membre du groupe "230.0.0.1" le client adresse la méthode joinGroup du MulticastSocket avec l’adresse d’identification du groupe.

Le serveur utilise un DatagramSocket pour faire du broadcast à partirde données du client sur un MulticastSocket. Il aurait pu utiliser aussiun MulticastSocket. Le socket utilisé par le serveur pour envoyer leDatagramPacket n’est pas important. Ce qui est important pour lebroadcast est d’adresser l’information contenue dans le DatagramPacket, et le socket utilisé par le client pour l’écouter.

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

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

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

Synthèse

Client Serveur

TCP aSocket aServerSocketconnecté write read

read write

UDP aDatagramSocket aDatagramSocketnon connecté send receive

receive send

Multicast aMulticastSocket aDatagramSocket/aMulticastSocket

receive send

I/O Stream I/O Stream

aDatagramPacket

Page 95: 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 envoyerPréparer les données reçues

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

Images : Compression et Décompression

Comment ?En spécialisant les classes de base

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

Comment Définir un nouveau type de Sockets

La classe CompressionSocket et ses classes relatives4 étapes

1. Etendre java.io.FilterOutputStream pour créer un output stream pour ce type de Socket. Surcharge de méthodes si nécessaire. 2. Etendre java.io.FilterInputStream 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 97: Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java

Un nouveau Package

Page 98: Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre 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

et maintenant les EJB : Entreprise Java Beanset JINI …..