0% ont trouvé ce document utile (0 vote)
15 vues81 pages

Cours sur les Systèmes Distribués à ISECS

Transféré par

Hafid Salim
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues81 pages

Cours sur les Systèmes Distribués à ISECS

Transféré par

Hafid Salim
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours Systmes distribus

Tarak Chaari
Matre assistant linstitut suprieur dlectronique et de communication
[Link]@[Link]

[Link]
Cours SD

Votre interlocuteur
Tarak CHAARI Matre assistant lISECS Membre de lunit de recherche RedCad Enseignement: Ingnierie des systmes dinformation Recherche: ladaptation dans les environnements dynamiques

Tarak CHAARI (ISECS)

Systmes distribus

Cursus universitaire
PostDoc
LAAS Toulouse

Doctorat
LIRIS-CNRS INSA Lyon

DEA
INSA Lyon

VAC ATER ATER


INSA Lyon INSA Lyon

Ingniorat
ENIS Sfax PFE
INSA Lyon

VAC
INSA/ISEC S Lyon/Sfax

FST Mulhouse

Prpa.
IPEIS Sfax

Formation & Recherche Enseignement

VAC

Vacataire Tarak CHAARI (ISECS)

Systmes distribus

Contenu du cours systmes distribus

Introduction sur les systmes dinformation


Systme dinformation Architectures logicielles Apparition des systmes distribus

Pr-requis pour la programmation distribue


TCP/IP Les flux en Java

Outils pour la programmation distribue


Les sockets en JAVA
Tarak CHAARI (ISECS)

Systmes distribus

En rodage !!!

Introduction sur les systmes dinformation

Tarak CHAARI (ISECS)

Systmes distribus

Dfinitions 1

Qu'est ce qu'un systme d'information ? un ensemble organis de ressources (personnel, donnes, procdures, matriel, logiciel, ) permettant d'acqurir, de stocker, de structurer et de communiquer des informations sous forme de textes, images, sons, ou de donnes au sein des organisations. Selon leur finalit principale, on distingue des systmes d'information supports d'oprations (traitement de transaction, contrle de processus industriels, supports d'oprations de bureau et de communication) et des systmes d'information supports de gestion (aide la production de rapports, aide la dcision).
Tarak CHAARI (ISECS)

Systmes distribus

Un systme d'information mdical


Des bases de donnes
Administratives Dossier mdical Donnes mdicales

Une infrastructure rseau


Liaisons Ethernet Liaisons modem

Des postes de travail


MacIntosh, PC (WIN98, PC) Bureau du mdecin, des infirmires

Tarak CHAARI (ISECS)

Systmes distribus

Des applications mdicale

Gestion :
administrative du dossier mdical des mdicaments des lits des actes des examens du courrier lectronique

Tarak CHAARI (ISECS)

Systmes distribus

Les besoins du SI
Echange de donnes entre applications htrognes manipulant des donnes au format propritaire Rpartition des donnes sur des sites gographiques distants Interoprabilit des plates-formes de dveloppement Portabilit des applications Gestion de la cohrence permanente des donnes Gestion des accs concurrents Persistance des donnes Intgration des systmes lgacy Ouverture Scurit
Tarak CHAARI (ISECS)

Systmes distribus

D'autres exemple existent


Domaine banquaire Domaine de la production automobile...

Tarak CHAARI (ISECS)

Systmes distribus

Dfinitions 2
Qu'est ce qu'une application ?

une application est un outil qui permet de raliser une ou plusieurs tches ou fonctions. Un amalgame est courant avec le terme logiciel.

Tarak CHAARI (ISECS)

Systmes distribus

Exemple commande sur Internet

Authentification sur le rseau local Connexion sur le serveur distant Passage de la commande Gestion du suivi Gestion de relance

Tarak CHAARI (ISECS)

Systmes distribus

Encore en rodage?

Un peu dhistoire

Tarak CHAARI (ISECS)

Systmes distribus

13

L'Histoire
Le systme centralis (70)
Calcul Consoles de connexion Liaison srie

Le Web (95)
Approche information Clients documentaires Rseau Internet

Le client/serveur (80)
Gestion de donnes simples Distribution des donnes Emulation de terminaux Rseau propritaires

Les objets distribus (00)


Approche mtiers Clients htrognes / MV Rseau haut-dbits

Le code mobile (05)


Approche dynamique Collaboration de machines Rseaux intelligents et actifs
Systmes distribus

Le "fat" client (90)


Gestion interactive des donnes Clients graphiques Rseaux locaux
Tarak CHAARI (ISECS)

Systmes centraliss

Systmes centraliss
Terminaux
Compatible IBM Unix

Composants localiss sur un site unique Centralisation des donnes, des traitements et de la prsentation Historiquement sur systmes propritaires Terminaux lgers Cots ?
Tarak CHAARI (ISECS)

IHM

Systmes distribus

Client-serveur 1/4
Client-serveur 2 niveaux (2-tier)
Le poste de travail hberge lensemble de la gestion dinterface homme-machine et le traitement, Le serveur est un serveur de base de donnes Architecture dnomme client lourd Le poste de travail nhberge que linterface homme-machine Le serveur hberge les donnes et les traitements Architecture dnomme client lger

IHM IHM T
Tarak CHAARI (ISECS)

T Systmes distribus

Client-serveur 2/4

Avantage
Mise en uvre Efficace pour un nombre rduit de clients

Inconvnients
Cots de dploiement ? Cots de MAJ ? Accs concurrents ? (Limitation du nombre de clients) Htrognit sur BD ?

Tarak CHAARI (ISECS)

Systmes distribus

Client-serveur 3/4
Client-serveur 3 niveaux (3-tier) Le poste de travail hberge la gestion d interface homme-machine et une partie des traitements, Le serveur d applications gre l autre partie des traitements Le serveur de donnes gre les accs aux donnes Architecture dnomme traitements coopratifs

IHM

Tarak CHAARI (ISECS)

Systmes distribus

Client-serveur 4/4
Avantages
Premire infrastructure informatique pour un travail coopratif Centralisation des traitements au niveau du serveur Pas de duplication des donnes (tat global observable) Gestion plus simple de la cohrence et de l'intgrit des donnes Matrise globale lmentaire des processus (workflow) relativement

Tarak CHAARI (ISECS)

Systmes distribus

Options d architecture Client / Serveur

terminal Interface interactive Prsentation Application Application Application Application Application Application Gestion de donnes Application Appli Gest. Appli Gest.
donnes

Interface utilisateur

Interface Interface utilisateur utilisateur

Interface utilisateur

Interface utilisateur

donnes

Gestion de Donnes

Gestion de donnes

Gestion de donnes

Gestion de Gestion de donnes donnes

Gestion de donnes

Gestion de donnes

Station Unix + terminal

dialogue Application BD rpartie appli - BD distribue

Appli distribue et BD rpartie

Tarak CHAARI (ISECS)

Systmes distribus

Nouveaux besoins

La distribution et l'accs l'information dans une entreprise sont des facteurs fondamentaux de succs L'informatique est par nature distribue, volutive et varie ==> Besoins pour informatique de nouvelles architectures

Tarak CHAARI (ISECS)

Systmes distribus

Du rel au virtuel

Entreprise classique
Systme informatique sur un site unique Matrise de l'ensemble des phases conduisant la ralisation d'un produit

Entreprise virtuelle
Regroupement d'entreprises localises sur des sites gographiques distants Coopration en associant des comptences complmentaires Association limite dans le temps

==> Qu'elle infrastructure informatique peut supporter le systme d'information de l'entreprise virtuelle ?
Systmes distribus

Facteurs conomiques
Conjecture conomique Mondialisation du commerce et des marchs Accroissement de la concurrence Croissance de la complexit des produits ==> Ncessit d'augmenter la productivit et la comptitivit

Tarak CHAARI (ISECS)

Systmes distribus

Conclusion de la premire partie

Des technologies multiples Diffrents modles darchitectures Diffrents logiciels indpendants Une volution vers lintgration de lhtrogne Une premire solution : Programmation distribue

Tarak CHAARI(ISECS)

Systmes distribus

Outils pour la programmation distribue

Tarak CHAARI (ISECS)

Systmes distribus

25

Prrequis: Quelques rappels TCP/IP

Tarak CHAARI (ISECS)

Systmes distribus

Adresse IP
Tient sur 32 bits (IPv4)
un quadruplet de nombres de 8 bits chaque, spars par des points. Exple: [Link]

ICANN Internet Corporation for Assigned Names and Numbers


attribue les adresses IP du rseau public internet

@IP [Link]
adresse de rebouclage (ang. loopback) dsigne la machine locale (ang. localhost)

5 classes
Classe A: de [Link] [Link]
127 rseaux de plus que 16 millions dordinateurs chaque Rserves au grands rseaux 1er octet rseau (NetID), 3 octets pour l@ de lhte (hostID)
Tarak CHAARI (ISECS)

Systmes distribus

Adresse IP
Classe B: de [Link] [Link]
16575 rseaux de plus que 6500 ordinateurs chaque Rserves aux moyens rseaux les deux 1ers octets rseau, 2 octets suivants pour l@ de lhte

Classe C: de [Link] [Link]


+ que 2 millions de rseaux de 254 ordinateurs chaque Rserves au petits rseaux dentreprise les trois 1ers octets rseau, 4me octet pour l@ de lhte

Classe D: de [Link] [Link]


groupes multicast

Classe E
rserves pour futur usage

IPv6
Rsout le problme de pnurie dadresses IP @IP sur 128 bits
Systmes distribus

Tarak CHAARI (ISECS)

Port dcoute

16-bits unsigned integer,


de 1 65535.

Ports utilisateur >= 1024. Exples de ports rservs,


FTP, 21/TCP Telnet, 23/TCP SMTP, 25/TCP Login, 513/TCP HTTP, 80/TCP

Tarak CHAARI (ISECS)

Systmes distribus

Prrequis: Les Flux en JAVA Le package [Link] La gestion de fichiers en java Srialisation dobjets

Tarak CHAARI (ISECS)

Systmes distribus

Les Flots/Flux/Streams

Toutes les entres/sorties en JAVA sont gres par des flux (streams)
Lecture du clavier Affichage sur la console Lecture/Ecriture dans un fichier Echange de donnes rseaux avec les Sockets

Stream: objet JAVA possdant caractristique de pouvoir envoyer recevoir des donnes

la ou

Tarak CHAARI (ISECS)

Systmes distribus

Flux / Flots / Stream

Un flux est une serie d'informations envoy sur un canal de communication C'est le paradigme utilis dans le monde objet pour reprsenter une communication entre 2 entits qui ne sont pas des objets Un flux se comporte comme une rivire :
Il faut une source/metteur Et un recepteur/consommateur
Un flux est bidirectionnel, par contre les points d'accs (metteur/consommateur) ne peuvent travailler que dans un seul sens
Systmes distribus

Tarak CHAARI (ISECS)

Circulation dinformation sur un flux


Emetteur E1 Rcepteur Flux Emetteur Rcepteur E2

Les flux informatiques ne vhiculent que des octets Les metteurs et les rcepteurs se chargent de transformer les octets sous des formes plus intressantes pour les Entits (data, buffer, crypto...) Emetteur et recepteur doivent se mettre d'accord sur le format des structures envoyes (notion de protocole d'accord) La bibliotque [Link] dfinit l'ensemble des transformations que l'ont peut dsirer sur un ensemble d'octets arrivant dans le flux Il existe galement des emetteurs et des rcepteurs standards
Tarak CHAARI (ISECS)

Systmes distribus

Emetteurs et recepteur standards du systme d'exploitation


Il existe 3 flux standards pour un systme d'exploitation
Les octets circulant entre une application (A) et l'cran (E) pour indiquer une information standard [Link] Les octets circulant entre une application (A) et l'cran (E) pour indiquer une information d'erreur [Link] Les octets circulant entre le clavier (C) et une application (A) [Link]

Exercice: Reprsentez sur un schma les flux et les points d'entre qui vous interesserait en tant que programmeur

Tarak CHAARI (ISECS)

Systmes distribus

Exemple de saisie avec [Link]


Voici le code qui lit l'entre du clavier et qui envoie le caractre sur la sortie standard (affichage du code ASCII du caractre)
import [Link]; public class MainClass { public static void main(String[] args) throws IOException{ [Link]("Entrez un charctere"); int inChar = [Link](); [Link]("Vous avez saisie: "+inChar); } }
Systmes distribus

Tarak CHAARI (ISECS)

Intanciation des metteurs / rcepteurs Il existe des entits classiques pouvant tre la source ou la destination d'octets
Le fichier : Il permet de stocker des octets
Classe: [Link] (nommage, droits daccs et proprits dun fichier ou dun rpertoire) File f=new File(/tmp/toto);

La socket rseau : elle permet d'envoyer des octets une autre machine
Classe: [Link] (point dentre pour une connexion TCP/IP entre deux machines)
Socket s=new Socket([Link], 80)
Tarak CHAARI (ISECS)

Systmes distribus

Instanciation des flux de communication


Aprs la cration de la source ou destination, il est ncessaire de construire des objets d'accs au flux pour pouvoir changer les donnes Les accs sur les points d'entrs ne sont pas toujours homognes :
File f=new File(/tmp/toto); FileInputStream fin=new FileInputStream(f); [Link](); Socket s=new Socket([Link], 80); InputStream sin=[Link](); [Link](); private void lecture (InputStream in){ int i=[Link](); while(i!=-1) { [Link](i); i = [Link](); } }
Que peut ont dire des classes FileInputStream, et InputStream ? Quelles sont les fonctions que l'ont peut appliquer sur un flux d'entre ?
Tarak CHAARI (ISECS)

Systmes distribus

[Link]: arborescence de classes

Tarak CHAARI (ISECS)

Systmes distribus

API : InputStream
int available()
Returns the number of bytes that can be read (or skipped over) from this input stream without blocking by the next caller of a method for this input stream.

void close()
Closes this input stream and releases any system resources associated with the stream.

abstract int

read()

Reads the next byte of data from the input stream.

int

read(byte[] b)
Reads some number of bytes from the input stream and stores them into the buffer array b.

int

read(byte[] b, int off, int len)


Reads up to len bytes of data from the input stream into an array of bytes.
Systmes distribus

Tarak CHAARI (ISECS)

[Link]: arborescence de classes

Tarak CHAARI (ISECS)

Systmes distribus

Exercice: copie de fichiers

Ecrire une classe Copy qui ralise la copie dun fichier dans un autre. Exemple dutilisation: java Copy [Link] [Link]

Tarak CHAARI (ISECS)

Systmes distribus

Que se passe-t'il si ?

Que doit faire une entit lorsque qu'elle veut envoyer un long, double ? Que doit faire une entit lorsquelle lit le byte, celui-ci n'est pas encore disponible ? ==> Il faut dcorer nos flux

Tarak CHAARI (ISECS)

Systmes distribus

Dcoration de flux
La dcoration est l'art de traiter une srie d'octets avant de les transmettre l'application demandeuse. Il existe 4 familles de dcorations
Data : permet de convertir les bytes en structure primitive (long, boolean, double...) Character : permet de convertir les bytes en texte Object : permet de convertir les bytes en structure objet Service : buffer, crypto, gzip permet d'appliquer des fonctions spcifiques sur la lecture

Instanciation de dcorateur:
DataInputStream dis=new DataInputStream((new FileInputStream(/tmp/toto);
Systmes distribus

Tarak CHAARI (ISECS)

Flux de donnes: Data(Input|Output)Stream


Ces classes permettent de lire et d'crire des types primitifs sur des flux.
FileInputStream fis = new FileInputStream("[Link]"); DataInputStream dis = new DataInputStream(fis); int i = [Link](); double d = [Link](); String s = [Link](); FileOutputStream fos = new FileOutputStream("[Link]"); DataOutputStream dos = new DataOutputStream(fos); [Link](123); [Link](123.456); [Link]("Une chaine");

Tarak CHAARI (ISECS)

Systmes distribus

Flux de lecture / criture avec buffer


Cette classe permet de renvoyer, sur le flux de sortie theOutput, la chane de caractre lue sur le flux dentre theInput.
private void echoServer(InputStream theInput, OutputStream theOutput){

// Un BufferedReader permet de lire par ligne. BufferedReader plec = new BufferedReader( new InputStreamReader(theInput)); // Un PrintWriter possde toutes les oprations print classiques. PrintWriter pred = new PrintWriter( new BufferedWriter( new OutputStreamWriter(theOutput, true); while (true) { String str = [Link](); // lecture du message if ([Link]("END")) break; [Link]("ECHO = " + str); // trace locale [Link](str); // renvoi d'un cho } }
Systmes distribus

Tarak CHAARI (ISECS)

Flux de charactres
Ajout de la notion de flux de caractres (charater Streams)
Les InputStream et OutputStream se basent sur la lecture et criture doctets (bytes) Les caractres sont cods sur 2 octets Utilisations de deux classes (writer et reader) la place de InputStream et OutputStream Ecriture facile des caractres UNICODE (avec accents par exemple) Pour lire et crire directement des caractres unicode dans un fichier, il est conseill dutiliser FileReader et FileWriter la place de FileInputStream et FileOutputStream

Tarak CHAARI (ISECS)

Systmes distribus

Flux dobjets: Srialisation

La srialisation (Serialization) est le processus de transformation d'un objet dans un flux d'octets, et la dserialisation le processus inverse. La srialisation permet un objet d'tre facilement sauv sur un fichier ou transfr sur le rseau Les classes doivent implanter l'interface Serializable et ventuellement surcharger les mthodes readObject() et writeObject()

Tarak CHAARI (ISECS)

Systmes distribus

Flux dobjets :Syntaxe


La classe de lobjet quon veut srialiser doit implmenter linterface [Link] Gnralement, il ny a pas de mthodes implmenter sauf dans le cas o le programmeur veut dfinir des mthodes de srialisation ou dsrialisation spcifiques laide de:
-private void writeObject ([Link] out) throws IOException -private void readObject([Link] in) throws IOException, ClassNotFoundException;

Tarak CHAARI (ISECS)

Systmes distribus

Exemple de srialisation dun objet dans un fichier

Tarak CHAARI (ISECS)

Systmes distribus

Exemple de dsrialisation dun objet partir dun fichier

Tarak CHAARI (ISECS)

Systmes distribus

Exercice: Ecriture de logs

Ecrire un utilitaire de Gestion de logs WriteLog . Chaque log reprsente une ligne dans un fichier texte. Sur chaque ligne on trouve la date dcriture, lidentifiant de son crivain et son commentaire. Utilisez une classe Entry ayant pour attributs: la date, lidentifiant de lcrivain et son commentaire. Cette classe doit dfinir la mthode de srialisation de ses attributs dans un flux de sortie OutputStream ouvert.

Tarak CHAARI (ISECS)

Systmes distribus

Exercice: Lecture de logs

Ecrire un utilitaire ScanLog de lecture des logs enregistrs dans lexercice prcdent. Cet utilitaire doit permettre un parcours slectif en utilisant les options suivantes:
-after d : pour afficher les enregistrements crits aprs la date d -before d : pour afficher les enregistrements crits avant la date d -user u : pour afficher que les enregistrements crits par lcrivain u

Tarak CHAARI (ISECS)

Systmes distribus

[Link]: ce quil faut retenir

Tarak CHAARI (ISECS)

Systmes distribus

LES SOCKETS
Un Socket est un point de communication bidirectionnelle entre applications

Tarak CHAARI (ISECS)

Systmes distribus

54

introduction

Introduit dans Berkeley Unix 4.2 (BSD) en 1981 Reprsentation point point dun flux de donnes Un programme peut
crire des donnes Lire des donnes
A B

Application Socket

write read

read write
Systmes distribus

Tarak CHAARI (ISECS)

Dfinitions

Un Socket est un point de communication bidirectionnelle entre applications Un socket est associ un port de communication pour diffrencier les applications rseau sur une mme machine LAPI java fourni un package [Link] pour lutilisation des packages
[Link] pour limplmentation cot client [Link] pour limplmentation cot serveur
Tarak CHAARI (ISECS)

Systmes distribus

Schma de communication des sockets


Server

ServerSocket(1234)

Output/write stream Input/read stream

Client

Socket([Link], 1234) Peut tre un nom complet [Link]


Tarak CHAARI (ISECS) 57

Systmes distribus

[Link] : nommage
Cette classe permet de manipuler les adresses Internet. Pour obtenir une instance de cette classe : public static InetAddress getLocalHost() throws UnknownHostExeception Elle retourne un objet contenant l'adresse Internet de la machine locale. public static synchronized InetAddress getByName(String host_name) throws UnknownHostExeception Elle retourne un objet contenant l'adressse Internet de la machine dont le nom est pass en paramtre. Les mthodes principales de cette classe sont : public String getHostName () Retourne le nom de la machine dont l'adresse est stocke dans l'objet. public String toString () Retourne une chane de caractres qui liste le nom de la machine et son adresse. Exemple : InetAddress adresseLocale = [Link] (); InetAddress adresseServeur = [Link]("[Link]"); [Link](adresse);
Tarak CHAARI (ISECS)

Systmes distribus

Fonctions dun sockets

4 fonctions principales:
Se connecter une machine distante Envoyer des donnes Recevoir des donnes Fermer la connexion

Un socket ne peut se connecter qu une seule machine Un socket ne peut pas tre se reconnecter aprs la fermeture de connexion

Tarak CHAARI (ISECS)

Systmes distribus

Instanciation dun socket


La cration dun socket se fait laide de lun de ces constructeurs
public Socket(String host, int port) throws UnknownHostException, IOException public Socket(InetAddress address, int port) throws IOException public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException

Ces constructeurs crent un objet Socket et ouvre une connexion rseau avec la machine distante host Tous ces constructeurs lvent une exception en cas dimpossibilit de connexion
Tarak CHAARI (ISECS)

Systmes distribus

Connexion dun socket


Pour quun socket puisse se connecter une machine distante, cette dernire doit couter les requtes des clients sur le port spcifi

Il faut dfinir au minimum ladresse de la machine distante et son port dcoute pour pouvoir se connecter On peut utiliser les constructeurs pour dterminer les ports dcoute dune machine

Tarak CHAARI (ISECS)

Systmes distribus

Exercice
Ecrire un programme Java qui affiche sur lcran les ports dcoute dune machine distante donne (en ligne de commandes) Rappel: les ports TCP dune machine peuvent aller de 0 65535

Tarak CHAARI (ISECS)

Systmes distribus

Envoi et rception de donnes


Les donnes sont envoyes et reues travers les flux dentre/sortie
public InputStream IOException public OutputStream IOException getInputStream() getOutputStream() throws throws

Il y a aussi une mthode qui permet de fermer le flux denvoi et de rception de donnes
public synchronized IOException
Tarak CHAARI (ISECS)

void

close()

throws

Systmes distribus

Rception de donnes
La mthode getInputStream() permet dobtenir le flux dentre pour la rception des donnes On peut utiliser les mthodes classiques de InpuStream pour rcuprer les donnes entrantes Gnralement, on utilise les dcorateurs pour faciliter la manipulation des donnes reues
DataInputStream input; try { input = new DataInputStream([Link]());

String textFromServer = [Link](); [Link](textFromServer);


} catch (IOException e) {[Link](e);}
Tarak CHAARI (ISECS)

Systmes distribus

Exemple dun Socket cot client


Ce programme permet de se connecter un serveur qui fourni le temps sur le port TCP 13
try { Socket s = new Socket("[Link]", 13); InputStream in = [Link](); InputStreamReader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); String theTime = [Link](); [Link](theTime); } catch (IOException e) { return (new Date()).toString(); }
Tarak CHAARI (ISECS)

Systmes distribus

Envoi de donnes
La mthode getOutputStream() permet dobtenir le flux de sortie pour lenvoi des donnes On peut utiliser les mthodes classiques de OutputStream pour envoyer des donnes travers les sockets Gnralement, on utilise les dcorateurs pour faciliter lenvoi de donnes
PrintStream output; try { output = new PrintStream([Link]()); [Link]("Coucou serveur, je suis le client "); } catch (IOException e) {[Link](e);}
Tarak CHAARI (ISECS)

Systmes distribus

Exercice
Ecrire un programme java qui affiche le contenu dune page web distante en utilisant son URL Quelques indications
Instanciation de lurl: URL u = new URL(args[i]); [Link]() pour rcuprer le port TCP [Link]() pour rcuprer le protocole de lurl (on accepte que http) [Link]() pour rcuprer lhte distant [Link]() pour rcuprer le nom de la page demande

Requte HTTP
"GET " + [Link]() + " HTTP/1.0\r\n "Accept: text/plain, text/html, text/*\r\n "\r\n"
Tarak CHAARI (ISECS)

Systmes distribus

67

Quelques autres mthodes des Sockets

Informations gnrales sur la connexion :


public public public public InetAddress getInetAddress() InetAddress getLocalAddress() int getPort() int getLocalPort()

La mthode usuelle toString() :


public String toString()

Tarak CHAARI (ISECS)

Systmes distribus

La partie Serveur

Dans une communication client/serveur, on a le programme client qui initialise la connexion dun cot et la partie serveur qui rpond aux requettes des clients Les clients et les serveurs sont connects par des sockets Contrairement au client qui se connecte un poste distant, le serveur attend les connections dautres postes pour rpondre leurs requtes
Tarak CHAARI (ISECS)

Systmes distribus

69

Les sockets Serveur

Un socket serveur est attach un port particulier sur la machine locale Ensuite, il coute sur ce port pour attendre les requte des clients Quand un serveur dtecte une tentative de connexion, il lance une mthode accept(). Ceci cre automatiquement une socket entre le client et le serveur qui reprsente un canal de communication entre eux
Tarak CHAARI (ISECS)

Systmes distribus

70

Files dattente

Les connexions entrantes sont mises en file dattente jusqu ce que le serveur puisse les accepter En gnral, la taille de la file dattente est entre 5 et 50 Si la file dattente est pleine, le socket serveur refuse les connexions supplmentaires

Tarak CHAARI (ISECS)

Systmes distribus

71

La classe [Link]
La classe [Link] reprsente un socket serveur Un socket serveur est affect un port TCP ds son instanciation. Ensuite, il suffit dappeler sa mthode accept() pour couter les connexions entrantes accept() bloque le programme serveur jusqu ce quune connexion est dtecte. Dans ce cas, la mthode accept() retourne un objet socket ([Link])
Tarak CHAARI (ISECS)

Systmes distribus

72

Instanciation
Il y a 3 constructeurs principaux qui permettent:
laffectation de la socket un port TCP La longueur de la file dattente Ladresse IP sur laquelle la socket sera affecte public ServerSocket(int port) throws IOException public ServerSocket(int port, int backlog) throws IOException public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException

Instanciation classique :
try { ServerSocket serverSocket = new ServerSocket(80); } catch (IOException e) { [Link](e); }
Tarak CHAARI (ISECS)

Systmes distribus

73

Affectation aux ports


Quand un ServerSocket est cre, il essai de sattacher au port dfini dans le constructeur Sil existe un autre socket serveur qui coute dja sur le port spcif, lexception [Link], (sous classe de IOException) est leve Aucun processus serveur ne peut tre affect un port dja utilis par un autre processus serveur quil soit dvelopp en java ou non.
Systmes distribus

Tarak CHAARI (ISECS)

74

Mthodes principales dun server socket

Les mthodes principales dun server socket sont :


public Socket accept() throws IOException public void close() throws IOException

Un socket serveur ne peut plus tre rinitalis une fois quil est ferm

Tarak CHAARI (ISECS)

Systmes distribus

75

Lecture de donnes laide dun socket serveur


ServerSocket utilise la mthode accept() pour se connecter un client
public Socket accept() throws IOException

Il ny a pas des mthodes comme getInputStream() ou getOutputStream() pour un ServerSocket accept() retourne un objet de type [Link] avec lequel on peut obtenir les flux dentre et de sortie laide des mthodes getInputStream() et getOutputStream()
Tarak CHAARI (ISECS)

Systmes distribus

76

Exemple dun socket serveur

try { ServerSocket ss = new ServerSocket(2345); Socket s = [Link](); PrintWriter pw = new PrintWriter([Link]()); [Link]("Hello There!\r\n"); [Link](Really I have nothing to say\r\n"); [Link]("Goodbye now. \r\n"); [Link](); } catch (IOException e) { [Link](e); }
Systmes distribus

Tarak CHAARI (ISECS)

77

Un autre exemple
try { ServerSocket ss = new ServerSocket(port); while (true) { try { Socket s = [Link](); PrintWriter pw = new PrintWriter([Link]()); [Link]("Hello " + [Link]() + " on port " + [Link]() + "\r\n"); [Link]("This is " + [Link]() + " on port " + [Link]() + "\r\n"); [Link](); [Link](); } catch (IOException e) {} } } catch (IOException e) { [Link](e); }

Tarak CHAARI (ISECS)

Systmes distribus

78

Techniques recommandes dun serveur socket


Il est recommand dajouter du multithreading dans les serveur Il faut avoir une boucle continue qui traite les requtes des clients Au lieu de traiter les requtes directement, chaque socket devrait tre pass un Thread
while (true) { try { Socket s = [Link](); ThreadedEchoServer tes = new ThreadedEchoServer(s) ; [Link](); } catch (IOException e) {}
Tarak CHAARI (ISECS)

Systmes distribus

79

Exercice

Raliser deux versions dun serveur decho:


une sans les Thread une en utilisant les Thread

Dvelopper un client pour tester les serveurs decho Dvelopper un serveur HTTP simple qui renvoi le contenu du fichier demand dans une requte Get

Tarak CHAARI (ISECS)

Systmes distribus

80

Pour apprendre plus sur les sockets

Java Network Programming


OReilly & Associates, 1997 ISBN 1-56592-227-1

Java I/O
OReilly & Associates, 1999 ISBN 1-56592-485-1

Systmes distribus

Vous aimerez peut-être aussi