• Aucun résultat trouvé

Programmation Java Avanc´ee Module RPCI01 D´epartement R&T

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation Java Avanc´ee Module RPCI01 D´epartement R&T"

Copied!
128
0
0

Texte intégral

(1)

Programmation Java Avanc´ ee

Module RPCI01

D´epartement R&T

IUT de Villetaneuse

16 novembre 2016

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 1 / 74

(2)

Plan du cours

1 La gestion des exceptions

2 Les fichiers enjava

3 Les sockets

4 Les threads

5 Synchronisation de threads

(3)

La gestion des exceptions

1. La gestion des exceptions

Lev´ee d’une exception : la clausethrow

Appel d’une m´ethode levant une exception : clause try / catch Graphe d’h´eritage des exceptions

Les RuntimeException

Redirection (ou d´el´egation) d’une exception

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 3 / 74

(4)

La gestion des exceptions Lev´ee d’une exception : la clausethrow

Lev´ ee d’une exception

Clause throw

Lorsqu’une m´ethode ne peut s’ex´ecuter, par exemple parce qu’une situation anormale est d´etect´ee ou que lesparam`etres qu’on lui a fournis ne conviennent pas, au lieu de le signaler en retournant un bool´een ou un code d’erreur, elle peut lever une exception.

(5)

La gestion des exceptions Lev´ee d’une exception : la clausethrow

Lev´ ee d’une exception

Exemple : d´epiler une pile vide public class Pile{

private Object [] tabVal;

private int indexSommet;

. . .

public Object depiler() throws Exception{

Object valeur;

if (this.estVide())

throw new Exception("pile vide");

valeur = this.tabVal[this.indexSommet];

this.indexSommet--;

return (valeur);

} . . .

La m´ethode signale qu’elle estsusceptible de lever une exception.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 5 / 74

(6)

La gestion des exceptions Lev´ee d’une exception : la clausethrow

Lev´ ee d’une exception

Exemple : d´epiler une pile vide public class Pile{

private Object [] tabVal;

private int indexSommet;

. . .

public Object depiler() throws Exception{

Object valeur;

if (this.estVide())

throw new Exception("pile vide");

valeur = this.tabVal[this.indexSommet];

this.indexSommet--;

return (valeur);

} . . .

La m´ethode signale qu’elle estsusceptible de lever une exception.

(7)

La gestion des exceptions Lev´ee d’une exception : la clausethrow

Lev´ ee d’une exception

Si une m´ethode ne peut s’ex´ecuter Si ellel`eve une exception

1 ellecr´ee un objet(ici declasse Exception), lui confie un message, puis le lance comme une bouteille `a la mer.

2 onquitte imm´ediatement la m´ethode: la fin de son code n’est donc pas ex´ecut´ee.

Si ellene l`eve pas d’exception, la m´ethode se termine normalement.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 6 / 74

(8)

La gestion des exceptions Lev´ee d’une exception : la clausethrow

Lev´ ee d’une exception

Si une m´ethode ne peut s’ex´ecuter Si ellel`eve une exception

1 ellecr´ee un objet(ici declasse Exception), lui confie un message, puis le lance comme une bouteille `a la mer.

2 onquitte imm´ediatement la m´ethode: la fin de son code n’est donc pas ex´ecut´ee.

Si ellene l`eve pas d’exception, la m´ethode se termine normalement.

(9)

La gestion des exceptions Appel d’une m´ethode levant une exception : clausetry / catch

Appel d’une m´ ethode levant une exception

Objectif : ´eviter que le programme ne soit interrompu

1 appel d’une m´ethodesusceptible de lever une exception `a l’int´erieur d’unbloc try.

2 r´ecup´eration de cette exception dans un bloccatch dans lequel on a pr´evu un traitement appropri´e.

Exemple . . .

try{

. . .

Object aux = p.depiler();

. . .

} catch(Exception e){

// traitement de l’exception System.out.println(e);

} . . .

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 7 / 74

(10)

La gestion des exceptions Appel d’une m´ethode levant une exception : clausetry / catch

Appel d’une m´ ethode levant une exception

Objectif : ´eviter que le programme ne soit interrompu

1 appel d’une m´ethodesusceptible de lever une exception `a l’int´erieur d’unbloc try.

2 r´ecup´eration de cette exception dans un bloccatch dans lequel on a pr´evu un traitement appropri´e.

Exemple . . .

try{

. . .

Object aux = p.depiler();

. . .

} catch(Exception e){

// traitement de l’exception System.out.println(e);

} . . .

(11)

La gestion des exceptions Appel d’une m´ethode levant une exception : clausetry / catch

Appel d’une m´ ethode levant une exception

Si la m´ethode appel´eel`eve une exception, on quitte le bloc tryet l’exception est intercept´eedans le bloc catch dont le code est alors ex´ecut´e, pr´ecisant les actions `a effectuer.

Si la m´ethode appel´eene l`eve pas d’exception, le bloctryse termine et on ne passe pasdans le bloc catch.

Dans tous les cas, le programme se poursuit `a l’instruction suivant le bloc catch.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 8 / 74

(12)

La gestion des exceptions Appel d’une m´ethode levant une exception : clausetry / catch

Appel d’une m´ ethode levant une exception

Si la m´ethode appel´eel`eve une exception, on quitte le bloc tryet l’exception est intercept´eedans le bloc catch dont le code est alors ex´ecut´e, pr´ecisant les actions `a effectuer.

Si la m´ethode appel´eene l`eve pas d’exception, le bloctryse termine et on ne passe pasdans le bloc catch.

Dans tous les cas, le programme se poursuit `a l’instruction suivant le bloc catch.

(13)

La gestion des exceptions Appel d’une m´ethode levant une exception : clausetry / catch

Appel d’une m´ ethode levant une exception

Bloc try: plusieurs m´ethodes peuvent lever des exceptions diff´erentes Un bloc trypeut ˆetre suivi deplusieurs blocscatch, chacun traitant une exception particuli`ere.

Les classes d’exception ´etant hi´erarchis´ees, il faut traiter dans les premiers blocscatchles exceptions du bas de la hi´erarchieet dans les dernierscelles du haut de la hi´erarchie.

Une clausefinally peut ˆetre rajout´eeapr`es les blocs catch. Elle est ex´ecut´ee dans tous les cas(lib´eration de ressources, fermeture de fichiers, . . . ).

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 9 / 74

(14)

La gestion des exceptions Appel d’une m´ethode levant une exception : clausetry / catch

Appel d’une m´ ethode levant une exception

Bloc try: plusieurs m´ethodes peuvent lever des exceptions diff´erentes Un bloc trypeut ˆetre suivi deplusieurs blocscatch, chacun traitant une exception particuli`ere.

Les classes d’exception ´etant hi´erarchis´ees, il faut traiter dans les premiers blocscatchles exceptions du bas de la hi´erarchieet dans les dernierscelles du haut de la hi´erarchie.

Une clausefinally peut ˆetre rajout´eeapr`es les blocs catch. Elle est ex´ecut´ee dans tous les cas(lib´eration de ressources, fermeture de fichiers, . . . ).

(15)

La gestion des exceptions Appel d’une m´ethode levant une exception : clausetry / catch

Appel d’une m´ ethode levant une exception

Bloc try: plusieurs m´ethodes peuvent lever des exceptions diff´erentes Un bloc trypeut ˆetre suivi deplusieurs blocscatch, chacun traitant une exception particuli`ere.

Les classes d’exception ´etant hi´erarchis´ees, il faut traiter dans les premiers blocscatchles exceptions du bas de la hi´erarchieet dans les dernierscelles du haut de la hi´erarchie.

Une clausefinally peut ˆetre rajout´eeapr`es les blocs catch. Elle est ex´ecut´ee dans tous les cas(lib´eration de ressources, fermeture de fichiers, . . . ).

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 9 / 74

(16)

La gestion des exceptions Graphe d’h´eritage des exceptions

Graphe d’h´ eritage des exceptions

Throwable

Exception

InterruptedException

RuntimeException

ArithmeticException

NullPointerException

ClassCastException . . . . . .

Error

ThreadDeath . . .

(17)

La gestion des exceptions Graphe d’h´eritage des exceptions

Graphe d’h´ eritage des exceptions

Les branches du graphe

Error:erreurs graves non r´eparables. Elles ne peuvent ˆetre trait´ees dans un bloc try/catch.

Exception :erreurs r´ecup´erables :

InterruptedException: exceptions quidoivent n´ecessairement ˆetre trait´ees dans un bloctry/catch.

RuntimeException: exceptions qui n’exigent pas d’ˆetre trait´ees dans un bloctry/catchmais on a quand mˆeme int´erˆet `a le faire.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 11 / 74

(18)

La gestion des exceptions Graphe d’h´eritage des exceptions

Graphe d’h´ eritage des exceptions

Les branches du graphe

Error:erreurs graves non r´eparables. Elles ne peuvent ˆetre trait´ees dans un bloc try/catch.

Exception :erreurs r´ecup´erables :

InterruptedException: exceptions quidoivent n´ecessairement ˆetre trait´ees dans un bloctry/catch.

RuntimeException: exceptions qui n’exigent pas d’ˆetre trait´ees dans un bloctry/catchmais on a quand mˆeme int´erˆet `a le faire.

(19)

La gestion des exceptions LesRuntimeException

RuntimeException sans bloc try/catch

Exemple

int tab[] = new int[10];

for (int i = 0; i < 11; i++) tab[i] = i;

System.out.println("fin normale de l’ex´ecution");

A l’ex´ecution

java.lang.ArrayIndexOutOfBoundsExceptionest lev´ee au moment o`u i vaut 10.

Le message de fin n’est pas affich´e : arrˆet brutal du programme.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 12 / 74

(20)

La gestion des exceptions LesRuntimeException

RuntimeException sans bloc try/catch

Exemple

int tab[] = new int[10];

for (int i = 0; i < 11; i++) tab[i] = i;

System.out.println("fin normale de l’ex´ecution");

A l’ex´ecution

java.lang.ArrayIndexOutOfBoundsExceptionest lev´ee au moment o`u i vaut 10.

Le message de fin n’est pas affich´e : arrˆet brutal du programme.

(21)

La gestion des exceptions LesRuntimeException

RuntimeException avec bloc try/catch (conseill´ e)

Exemple

int tab[] = new int[10];

try{

for (i = 0; i < 11; i++) tab[i] = i;

} catch(ArrayIndexOutOfBoundsException e){

System.out.println("erreur de programmation");

}

System.out.println("fin normale de l’ex´ecution");

A l’ex´ecution

affichage : “erreur de programmation” et “fin normale de l’ex´ecution”

l’erreur est d´etect´ee, contrˆol´ee et le programme se termine normalement.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 13 / 74

(22)

La gestion des exceptions LesRuntimeException

RuntimeException avec bloc try/catch (conseill´ e)

Exemple

int tab[] = new int[10];

try{

for (i = 0; i < 11; i++) tab[i] = i;

} catch(ArrayIndexOutOfBoundsException e){

System.out.println("erreur de programmation");

}

System.out.println("fin normale de l’ex´ecution");

A l’ex´ecution

affichage : “erreur de programmation” et “fin normale de l’ex´ecution”

l’erreur est d´etect´ee, contrˆol´ee et le programme se termine normalement.

(23)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Redirection (ou d´ el´ egation) d’une exception

Exemple

public class Pile{

private Object [] tabVal;

private int indexSommet = -1; // pile vide . . .

public Object depiler() throws Exception{

Object aux = this.tabVal[this.indexSommet];

this.indexSommet--;

return(aux);

} Ex´ecution

une ArrayIndexOutOfBoundsExceptionest lev´ee lors de l’appel `a this.tabVal[-1], qui estredirig´ee vers l’appelant par depiler() la m´ethode depiler() l`eve donc uneexception sans qu’il y ait de throw new Exception(. . .) dans le corps de cette m´ethode.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 14 / 74

(24)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Redirection (ou d´ el´ egation) d’une exception

Exemple

public class Pile{

private Object [] tabVal;

private int indexSommet = -1; // pile vide . . .

public Object depiler() throws Exception{

Object aux = this.tabVal[this.indexSommet];

this.indexSommet--;

return(aux);

} Ex´ecution

une ArrayIndexOutOfBoundsExceptionest lev´ee lors de l’appel `a this.tabVal[-1], qui estredirig´ee vers l’appelant par depiler() la m´ethode depiler() l`eve donc uneexception sans qu’il y ait de throw new Exception(. . .) dans le corps de cette m´ethode.

(25)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Redirection (ou d´ el´ egation) d’une exception

Autre exemple public class Pile{

private ArrayList pile;

...

public Object depiler() throws Exception{

return(this.pile.remove(this.pile.size()-1));

} Ex´ecution

Lorsque la pile est vide, this.pile.size()vaut 0.

l’appel `a this.pile.remove(-1)l`eve une

IndexOutOfBoundsExceptionqui est redirig´ee vers l’appelant par la m´ethode depiler()

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 15 / 74

(26)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Redirection (ou d´ el´ egation) d’une exception

Autre exemple public class Pile{

private ArrayList pile;

...

public Object depiler() throws Exception{

return(this.pile.remove(this.pile.size()-1));

} Ex´ecution

Lorsque la pile est vide, this.pile.size()vaut 0.

l’appel `a this.pile.remove(-1)l`eve une

IndexOutOfBoundsExceptionqui est redirig´ee vers l’appelant par la m´ethode depiler()

(27)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Redirection (ou d´ el´ egation) d’une exception

Autre exemple public class Pile{

private ArrayList pile;

...

public Object depiler() throws Exception{

return(this.pile.remove(this.pile.size()-1));

} Ex´ecution

Lorsque la pile est vide, this.pile.size()vaut 0.

l’appel `a this.pile.remove(-1)l`eve une

IndexOutOfBoundsExceptionqui est redirig´ee vers l’appelant par la m´ethode depiler()

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 15 / 74

(28)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Redirection et lev´ ee d’une exception dans la mˆ eme m´ ethode

Exemple

public void monDepilage(int i) throws Exception{

if (i == 0)

throw new Exception(" i vaut 0 " ); // lev´ee Object aux = this.pile.depiler(); // redirection . . .

}

(29)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Filtre de r´ eponse utilisant une exception

Exemple

String mac = null;

boolean ok = false;

do{

try{

System.out.print("adresse MAC ? : ");

mac = sc.next();

Protocoles.verifierMac(mac); // l`eve une exception ok = true;

} catch (Exception e) {System.out.println(e);}

} while(!ok);

Ex´ecution

au d´ebut,ok est mis `afalse

si la m´ethodeProtocoles.verifierMac(mac) ne l`eve pas d’exception,ok est mis `atrue et la boucle se termine.

si elle l`eve une exception, ok reste `a falseet la boucle est r´ep´et´ee.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 17 / 74

(30)

La gestion des exceptions Redirection (ou d´el´egation) d’une exception

Filtre de r´ eponse utilisant une exception

Exemple

String mac = null;

boolean ok = false;

do{

try{

System.out.print("adresse MAC ? : ");

mac = sc.next();

Protocoles.verifierMac(mac); // l`eve une exception ok = true;

} catch (Exception e) {System.out.println(e);}

} while(!ok);

Ex´ecution

au d´ebut,ok est mis `afalse

si la m´ethodeProtocoles.verifierMac(mac) ne l`eve pas d’exception,ok est mis `atrue et la boucle se termine.

si elle l`eve une exception, ok reste `a falseet la boucle est r´ep´et´ee.

(31)

Les fichiers enjava

2. Les fichiers en java

Ecriture et lecture simples´

Ecriture et lecture d’un objet simple´

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 18 / 74

(32)

Les fichiers enjava

Les classes gestionnaires de fichiers

organis´ees en couches.

se d´efinissent et se construisent les unes par rapport aux autres.

la plupart des m´ethodes de ces classes lancent des exceptions du type IOExceptionqu’il faut d´el´eguer.

(33)

Les fichiers enjava Ecriture et lecture simples´

Ecriture simple ´

import java.io.*;

import java.util.*;

public class Outil{

public static void enregistrerTexte(String nomFich) throws IOException{

PrintWriter pw = new PrintWriter(nomFich);

Scanner sc = new Scanner(System.in);

String ligne;

do {

System.out.print("donnez une ligne de texte (! pour terminer) : ");

ligne = sc.next();

if (!ligne.equals("!")) pw.println(ligne);

} while(!ligne.equals("!"));

pw.close();

} // fin enregistrerTexte . . .

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 20 / 74

(34)

Les fichiers enjava Ecriture et lecture simples´

Lecture simple

import java.io.*;

import java.util.*;

public class Outil{

public static void chargerTexte(String nomFich) throws IOException{

FileReader f = new FileReader(nomFich);

BufferedReader bIn = new BufferedReader(f);

String ligne = bIn.readLine();

while (ligne != null){

System.out.println(ligne); // traitement minimal ligne = bIn.readLine();

}

bIn.close();

f.close();

} // fin chargerTexte . . .

(35)

Les fichiers enjava Ecriture et lecture simples´

Classe de test

import java.io.*;

public class TestEcritureLecture{

public static void main (String[] args){

try {

Outil.enregistrerTexte("essai.txt");

Outil.chargerTexte("essai.txt");

} catch(IOException e){System.out.println(e);}

} // fin main } // fin class

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 22 / 74

(36)

Les fichiers enjava Ecriture et lecture d’un objet simple´

Ecriture d’un objet simple ´

public class Machine{

private String nom;

private String adresseIP;

private String adresseMAC;

. . .

public void enregistrerTexte(String nomFichier) throws IOException{

PrintWriter pOut = new PrintWriter(nomFichier);

pOut.print(this); // appelle le toString() de l’objet pOut.close();

} // fin enregistrerTexte public String toString(){

return (new String(this.nom + ";" + this.adresseIP + ";" + this.adresseMAC));

} // fin toString . . .

(37)

Les fichiers enjava Ecriture et lecture d’un objet simple´

Lecture d’un objet simple

public class Machine{

. . .

public void chargerTexte(String nomFich) throws IOException{

FileReader f = new FileReader(nomFich);

BufferedReader bIn = new BufferedReader(f);

String ligne = bIn.readLine();

StringTokenizer st = new StringTokenizer(ligne,";");

this.nom = st.nextToken();

this.adresseIP = st.nextToken();

this.adresseMAC = st.nextToken();

bIn.close();

f.close();

} // fin chargerTexte . . .

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 24 / 74

(38)

Les fichiers enjava Ecriture et lecture d’un objet simple´

Classe de test

import java.io.*;

public class TestMachine{

public static void main (String[] args){

try{

Machine m1 = new Machine("pollux","10.0.0.1",

"04:04:04:04:04:04");

m1.enregistrerTexte("machine.txt");

Machine m2 = new Machine();

m2.chargerTexte("machine.txt");

System.out.println(m2);

} catch(IOException e){System.out.println(e);}

} // fin main } // fin class

(39)

Les sockets

3. Les sockets

Utilisation des sockets Communications

Programmes clients/serveur en mode non connect´e Programmes clients/serveur en mode connect´e

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 26 / 74

(40)

Les sockets Utilisation des sockets

Sockets

Utilisation des sockets

m´ecanisme essentiel `a la communication entre processusdistants : permet de construire desapplications r´eparties selon le mod`ele client/serveur.

concerne les couches 3, 4 et 5

Session Transport

eseau Socket Application Client

Session Transport

eseau Socket Application Serveur

(41)

Les sockets Utilisation des sockets

Sockets

Utilisation des sockets

m´ecanisme essentiel `a la communication entre processusdistants : permet de construire desapplications r´eparties selon le mod`ele client/serveur.

concerne les couches 3, 4 et 5

Session Transport

eseau Socket Application Client

Session Transport

eseau Socket Application Serveur

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 27 / 74

(42)

Les sockets Utilisation des sockets

API SOCKET (Application Program Interface)

Sockets accessibles en utilisant des API

biblioth`eque deprimitives permettant d’assurer l’´echange de donn´ees entre deux processus distants.

interface entre les applications et lescouches r´eseaux(3, 4 et 5) existe dans de nombreux langages (C,java, . . . )

Param`etres pour l’´etablissement de la liaison protocole de transportutilis´e

adresse IP de la machine distante port de la machine distante

(43)

Les sockets Utilisation des sockets

API SOCKET (Application Program Interface)

Sockets accessibles en utilisant des API

biblioth`eque deprimitives permettant d’assurer l’´echange de donn´ees entre deux processus distants.

interface entre les applications et lescouches r´eseaux(3, 4 et 5) existe dans de nombreux langages (C,java, . . . )

Param`etres pour l’´etablissement de la liaison protocole de transportutilis´e

adresse IP de la machine distante port de la machine distante

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 28 / 74

(44)

Les sockets Utilisation des sockets

Suites d’encapsulations (protocole de transport = TCP)

Ether IP TCP DATA FCS Ether IP TCP DATA FCS

Interruption mat´erielle IP TCP DATA

File d’attente paquets IP IP TCP DATA

Interruption logicielle

TCP DATA TCP DATA

Socket Socket

DATA DATA

Emission´ eception

send(DATA) recv(DATA)

(45)

Les sockets Communications

Communication entre sockets

Communication suivant le mode utilis´e

non connect´e : par ´echange de datagrammes(par ex. paquets UDP) connect´e : par l’interm´ediaire de fichiersen lecture/´ecriture.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 30 / 74

(46)

Les sockets Communications

Rangement dans des tampons (mode connect´ e)

Utilisation de m´emoire tampon

m´ecanisme derangement dans des m´emoires tamponsmis en œuvre par les sockets en mode connect´e

pour chaque connexion, il existe un tampon d’´emissionet un tampon de r´eception

Tampon d’´emission

´ecriture socket

Tampon de r´eception lecture socket

(47)

Les sockets Communications

Rangement dans des tampons (mode connect´ e)

Utilisation de m´emoire tampon

m´ecanisme derangement dans des m´emoires tamponsmis en œuvre par les sockets en mode connect´e

pour chaque connexion, il existe un tampon d’´emissionet un tampon de r´eception

Tampon d’´emission

´ecriture socket

Tampon de r´eception lecture socket

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 31 / 74

(48)

Les sockets Communications

Appels bloquants ou non bloquants

Socket bloquante

lecture bloquante tant qu’il n’y arien `a lire dans le tampon de r´eception. D`es leur r´eception, les donn´ees sont envoy´ees `a l’application (mˆeme si le nombre d’octets re¸cus est inf´erieur au nombre d’octets demand´e par l’application).

´

ecriture bloquante uniquement si letampon en ´emission est plein.

Les octets rang´es dans le tampon sont ´emis sur le r´eseau tant que le tampon n’est pas vide.

Socket non bloquante

lecture d’untampon de r´eception vide, retourne une erreur.

´

ecriture dans untampon d’´emission plein, retourne une erreur.

(49)

Les sockets Communications

Appels bloquants ou non bloquants

Socket bloquante

lecture bloquante tant qu’il n’y arien `a lire dans le tampon de r´eception. D`es leur r´eception, les donn´ees sont envoy´ees `a l’application (mˆeme si le nombre d’octets re¸cus est inf´erieur au nombre d’octets demand´e par l’application).

´

ecriture bloquante uniquement si letampon en ´emission est plein.

Les octets rang´es dans le tampon sont ´emis sur le r´eseau tant que le tampon n’est pas vide.

Socket non bloquante

lecture d’untampon de r´eception vide, retourne une erreur.

´

ecriture dans untampon d’´emission plein, retourne une erreur.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 32 / 74

(50)

Les sockets Programmes clients/serveur en mode non connect´e

Mode non connect´ e en Java

CLIENT

s = newDatagramSocket();

p = newDatagramPacket(...);

s.send(p);

p = newDatagramPacket(...);

s.receive(p);

SERVEUR

s = newDatagramSocket(port);

p = newDatagramPacket(...);

s.receive(p);

p = newDatagramPacket(...);

s.send(p);

appel non bloquant appel pouvant ˆetre bloquant

(51)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du client en mode non connect´ e

1 Cr´eer uneDatagramSocket sans pr´eciser de num´ero de port(le syst`eme d’exploitation attribue automatiquement un num´ero de port local au client).

2 Pr´eparer un DatagramPacket(paquet UDP) qui contiendra la requˆete au serveur.

3 Utiliser la DatagramSocket pourenvoyer le paquet au serveur.

4 Utiliser la DatagramSocket pourlire la r´eponse du serveur (re¸cue dans un DatagramPacket).

5 Fermer laDatagramSocket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 34 / 74

(52)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du client en mode non connect´ e

1 Cr´eer uneDatagramSocket sans pr´eciser de num´ero de port(le syst`eme d’exploitation attribue automatiquement un num´ero de port local au client).

2 Pr´eparer un DatagramPacket(paquet UDP) qui contiendra la requˆete au serveur.

3 Utiliser la DatagramSocket pourenvoyer le paquet au serveur.

4 Utiliser la DatagramSocket pourlire la r´eponse du serveur (re¸cue dans un DatagramPacket).

5 Fermer laDatagramSocket.

(53)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du client en mode non connect´ e

1 Cr´eer uneDatagramSocket sans pr´eciser de num´ero de port(le syst`eme d’exploitation attribue automatiquement un num´ero de port local au client).

2 Pr´eparer un DatagramPacket(paquet UDP) qui contiendra la requˆete au serveur.

3 Utiliser la DatagramSocket pourenvoyer le paquet au serveur.

4 Utiliser la DatagramSocket pourlire la r´eponse du serveur (re¸cue dans un DatagramPacket).

5 Fermer laDatagramSocket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 34 / 74

(54)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du client en mode non connect´ e

1 Cr´eer uneDatagramSocket sans pr´eciser de num´ero de port(le syst`eme d’exploitation attribue automatiquement un num´ero de port local au client).

2 Pr´eparer un DatagramPacket(paquet UDP) qui contiendra la requˆete au serveur.

3 Utiliser la DatagramSocket pourenvoyer le paquet au serveur.

4 Utiliser la DatagramSocket pourlire la r´eponse du serveur (re¸cue dans un DatagramPacket).

5 Fermer laDatagramSocket.

(55)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du client en mode non connect´ e

1 Cr´eer uneDatagramSocket sans pr´eciser de num´ero de port(le syst`eme d’exploitation attribue automatiquement un num´ero de port local au client).

2 Pr´eparer un DatagramPacket(paquet UDP) qui contiendra la requˆete au serveur.

3 Utiliser la DatagramSocket pourenvoyer le paquet au serveur.

4 Utiliser la DatagramSocket pourlire la r´eponse du serveur (re¸cue dans un DatagramPacket).

5 Fermer laDatagramSocket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 34 / 74

(56)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du serveur en mode non connect´ e

Cr´eer uneDatagramSocket en pr´ecisant le num´ero de portsur lequel le serveur ´ecoutera.

R´ep´eter ind´efiniment : Lire la requˆete du client:

Pr´eparer unDatagramPacket(paquet UDP) qui recevra la requˆete du client.

Utiliser laDatagramSocketpourlire la requˆeted’un client (re¸cue dans leDatagramPacket).

Envoyer la r´eponse au client:

Pr´eparer unDatagramPacketqui contiendra la r´eponse au client.

Utiliser laDatagramSocketpourepondre au client(r´eponse contenue dans leDatagramPacket).

Fin R´ep´eter

Fermer laDatagramSocket.

(57)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du serveur en mode non connect´ e

Cr´eer uneDatagramSocket en pr´ecisant le num´ero de portsur lequel le serveur ´ecoutera.

R´ep´eter ind´efiniment : Lire la requˆete du client:

Pr´eparer unDatagramPacket(paquet UDP) qui recevra la requˆete du client.

Utiliser laDatagramSocketpourlire la requˆeted’un client (re¸cue dans leDatagramPacket).

Envoyer la r´eponse au client:

Pr´eparer unDatagramPacketqui contiendra la r´eponse au client.

Utiliser laDatagramSocketpourepondre au client(r´eponse contenue dans leDatagramPacket).

Fin R´ep´eter

Fermer laDatagramSocket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 35 / 74

(58)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du serveur en mode non connect´ e

Cr´eer uneDatagramSocket en pr´ecisant le num´ero de portsur lequel le serveur ´ecoutera.

R´ep´eter ind´efiniment : Lire la requˆete du client:

Pr´eparer unDatagramPacket(paquet UDP) qui recevra la requˆete du client.

Utiliser laDatagramSocketpourlire la requˆeted’un client (re¸cue dans leDatagramPacket).

Envoyer la r´eponse au client :

Pr´eparer unDatagramPacketqui contiendra la r´eponse au client.

Utiliser laDatagramSocketpourepondre au client(r´eponse contenue dans leDatagramPacket).

Fin R´ep´eter

Fermer laDatagramSocket.

(59)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du serveur en mode non connect´ e

Cr´eer uneDatagramSocket en pr´ecisant le num´ero de portsur lequel le serveur ´ecoutera.

R´ep´eter ind´efiniment : Lire la requˆete du client:

Pr´eparer unDatagramPacket(paquet UDP) qui recevra la requˆete du client.

Utiliser laDatagramSocketpourlire la requˆeted’un client (re¸cue dans leDatagramPacket).

Envoyer la r´eponse au client:

Pr´eparer unDatagramPacketqui contiendra la r´eponse au client.

Utiliser laDatagramSocketpourepondre au client(r´eponse contenue dans leDatagramPacket).

Fin R´ep´eter

Fermer laDatagramSocket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 35 / 74

(60)

Les sockets Programmes clients/serveur en mode non connect´e

Algorithme du serveur en mode non connect´ e

Cr´eer uneDatagramSocket en pr´ecisant le num´ero de portsur lequel le serveur ´ecoutera.

R´ep´eter ind´efiniment : Lire la requˆete du client:

Pr´eparer unDatagramPacket(paquet UDP) qui recevra la requˆete du client.

Utiliser laDatagramSocketpourlire la requˆeted’un client (re¸cue dans leDatagramPacket).

Envoyer la r´eponse au client:

Pr´eparer unDatagramPacketqui contiendra la r´eponse au client.

Utiliser laDatagramSocketpourepondre au client(r´eponse contenue dans leDatagramPacket).

Fin R´ep´eter

Fermer laDatagramSocket.

(61)

Les sockets Programmes clients/serveur en mode connect´e

Mode connect´ e en Java

CLIENT Socket socket =

new Socket(ip,port);

in = new BufferedReader(

new InputStreamReader(

socket.getInputStream()));

out = new PrintWriter(

socket.getOutputStream());

out.println(...);

out.flush();

String str = in.readLine();

socket.close();

SERVEUR ServerSocket s =

new ServerSocket(port);

Socket socket = s.accept();

in = new BufferedReader(

new InputStreamReader(

socket.getInputStream()));

out = new PrintWriter(

socket.getOutputStream());

String str = in.readLine();

out.println(...);

out.flush();

socket.close();

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 36 / 74

(62)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du client en mode connect´ e

1 Cr´eer une socket vers un serveur ´ecoutant sur un port donn´e : adresse IP du serveur et num´ero de portdu service (le syst`eme d’exploitation attribue automatiquement pour cette connexion un num´ero de port local au client).

2 Cr´eer un flux entrant et un flux sortant en utilisant la socket (ces flux se connectent sur les flux sortant et entrant du serveur).

3 R´ep´eter tant que n´ecessaire Ecrire/lire´ dans ces flux.

Fin R´ep´eter

4 Fermer les flux.

5 Fermer la socket.

(63)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du client en mode connect´ e

1 Cr´eer une socket vers un serveur ´ecoutant sur un port donn´e : adresse IP du serveur et num´ero de portdu service (le syst`eme d’exploitation attribue automatiquement pour cette connexion un num´ero de port local au client).

2 Cr´eer un flux entrant et un flux sortant en utilisant la socket (ces flux se connectent sur les flux sortant et entrant du serveur).

3 R´ep´eter tant que n´ecessaire Ecrire/lire´ dans ces flux.

Fin R´ep´eter

4 Fermer les flux.

5 Fermer la socket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 37 / 74

(64)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du client en mode connect´ e

1 Cr´eer une socket vers un serveur ´ecoutant sur un port donn´e : adresse IP du serveur et num´ero de portdu service (le syst`eme d’exploitation attribue automatiquement pour cette connexion un num´ero de port local au client).

2 Cr´eer un flux entrant et un flux sortant en utilisant la socket (ces flux se connectent sur les flux sortant et entrant du serveur).

3 R´ep´eter tant que n´ecessaire Ecrire/lire´ dans ces flux.

Fin R´ep´eter

4 Fermer les flux.

5 Fermer la socket.

(65)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du client en mode connect´ e

1 Cr´eer une socket vers un serveur ´ecoutant sur un port donn´e : adresse IP du serveur et num´ero de portdu service (le syst`eme d’exploitation attribue automatiquement pour cette connexion un num´ero de port local au client).

2 Cr´eer un flux entrant et un flux sortant en utilisant la socket (ces flux se connectent sur les flux sortant et entrant du serveur).

3 R´ep´eter tant que n´ecessaire Ecrire/lire´ dans ces flux.

Fin R´ep´eter

4 Fermer les flux.

5 Fermer la socket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 37 / 74

(66)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du client en mode connect´ e

1 Cr´eer une socket vers un serveur ´ecoutant sur un port donn´e : adresse IP du serveur et num´ero de portdu service (le syst`eme d’exploitation attribue automatiquement pour cette connexion un num´ero de port local au client).

2 Cr´eer un flux entrant et un flux sortant en utilisant la socket (ces flux se connectent sur les flux sortant et entrant du serveur).

3 R´ep´eter tant que n´ecessaire Ecrire/lire´ dans ces flux.

Fin R´ep´eter

4 Fermer les flux.

5 Fermer la socket.

(67)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du serveur en mode connect´ e

Algorithme du serveur

Cr´eer uneServerSocket´ecoutant sur un port donn´e.

Se mettre `a l’´ecoute des connexions entrantes.

R´ep´eter pour chaque connexion entrante :

Accepter la connexion: une nouvelle Socket est cr´ee puis pass´ee en param`etre `aun thread qui g`ere la connexion.

Fin R´ep´eter

Algorithme du thread

R´ep´eter tant que n´ecessaire :

Lire et/ou ´ecriresur la nouvelle socket.

Fin R´ep´eter Fermer la socket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 38 / 74

(68)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du serveur en mode connect´ e

Algorithme du serveur

Cr´eer uneServerSocket´ecoutant sur un port donn´e.

Se mettre `a l’´ecoute des connexions entrantes.

R´ep´eter pour chaque connexion entrante :

Accepter la connexion: une nouvelle Socket est cr´ee puis pass´ee en param`etre `aun thread qui g`ere la connexion.

Fin R´ep´eter

Algorithme du thread

R´ep´eter tant que n´ecessaire :

Lire et/ou ´ecriresur la nouvelle socket.

Fin R´ep´eter Fermer la socket.

(69)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du serveur en mode connect´ e

Algorithme du serveur

Cr´eer uneServerSocket´ecoutant sur un port donn´e.

Se mettre `a l’´ecoute des connexions entrantes.

R´ep´eter pour chaque connexion entrante :

Accepter la connexion: une nouvelle Socket est cr´ee puis pass´ee en param`etre `aun thread qui g`ere la connexion.

Fin R´ep´eter Algorithme du thread

R´ep´eter tant que n´ecessaire :

Lire et/ou ´ecriresur la nouvelle socket.

Fin R´ep´eter Fermer la socket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 38 / 74

(70)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du serveur en mode connect´ e

Algorithme du serveur

Cr´eer uneServerSocket´ecoutant sur un port donn´e.

Se mettre `a l’´ecoute des connexions entrantes.

R´ep´eter pour chaque connexion entrante :

Accepter la connexion: une nouvelle Socket est cr´ee puis pass´ee en param`etre `aun thread qui g`ere la connexion.

Fin R´ep´eter Algorithme du thread

R´ep´eter tant que n´ecessaire :

Lire et/ou ´ecriresur la nouvelle socket.

Fin R´ep´eter Fermer la socket.

(71)

Les sockets Programmes clients/serveur en mode connect´e

Algorithme du serveur en mode connect´ e

Algorithme du serveur

Cr´eer uneServerSocket´ecoutant sur un port donn´e.

Se mettre `a l’´ecoute des connexions entrantes.

R´ep´eter pour chaque connexion entrante :

Accepter la connexion: une nouvelle Socket est cr´ee puis pass´ee en param`etre `aun thread qui g`ere la connexion.

Fin R´ep´eter Algorithme du thread

R´ep´eter tant que n´ecessaire :

Lire et/ou ´ecriresur la nouvelle socket.

Fin R´ep´eter Fermer la socket.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 38 / 74

(72)

Les threads

4. Les threads

Rappels

Les threads : des processus particuliers Les threads enjava

H´eritage de la classeThread

Impl´ementation de l’interfaceRunnable La terminaison d’un thread

(73)

Les threads Rappels

Rappels sur les processus

Unprocessus est unprogrammeen cours d’ex´ecution.

Dans le cas g´en´eral, plusieurs processus semblents’ex´ecuter simultan´ement (multi-tˆaches)

En r´ealit´e, l’ordonnanceurr´epartit le temps CPUentre les diff´erents processus.

Le syst`eme alloue de lam´emoire `achaque processus.

Un processus a besoin de ressources pour s’ex´ecuter : il dispose d’un ensemble de registres du processeur qui sont sauvegard´es par le syst`eme lorsque le processus n’est pas en cours d’ex´ecution.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 40 / 74

(74)

Les threads Rappels

Les diff´ erents ´ etats d’un processus

en ex´ecution

prˆet bloqu´e

Diff´erents ´etats d’un processus

En cours d’ex´ecution (running) : il s’ex´ecute sur le processeur.

Prˆet : le processus est prˆet `a s’ex´ecuter, mais n’a pas le processeur (occup´e par un autre processus en cours d’ex´ecution).

Bloqu´e : en attente de ressource ou en sommeil.

(75)

Les threads Rappels

Les diff´ erents ´ etats d’un processus

en ex´ecution

prˆet bloqu´e

Diff´erents ´etats d’un processus

En cours d’ex´ecution (running) : il s’ex´ecute sur le processeur.

Prˆet : le processus est prˆet `a s’ex´ecuter, mais n’a pas le processeur (occup´e par un autre processus en cours d’ex´ecution).

Bloqu´e : en attente de ressource ou en sommeil.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 41 / 74

(76)

Les threads Rappels

Les transitions entre ´ etats d’un processus

en ex´ecution

prˆet bloqu´e

Transitions entre ´etats en ex´ecution → bloqu´e:

S’il re¸coit l’ordre dedormir.

S’il a besoin d’uneressource non disponible.

en ex´ecution → prˆet :

S’il a´epuis´eson quantum detemps CPU.

prˆet→ en ex´ecution :

Sil’ordonnanceur lui donne la main.

bloqu´e → prˆet :

Si sontemps de sommeilest´epuis´e.

Si laressourcequ’il attendait s’estlib´er´ee.

(77)

Les threads Rappels

Les transitions entre ´ etats d’un processus

en ex´ecution

prˆet bloqu´e

Transitions entre ´etats en ex´ecution → bloqu´e:

S’il re¸coit l’ordre dedormir.

S’il a besoin d’uneressource non disponible.

en ex´ecution → prˆet :

S’il a´epuis´eson quantum detemps CPU.

prˆet→ en ex´ecution :

Sil’ordonnanceur lui donne la main.

bloqu´e → prˆet :

Si sontemps de sommeilest´epuis´e.

Si laressourcequ’il attendait s’estlib´er´ee.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 42 / 74

(78)

Les threads Rappels

Les transitions entre ´ etats d’un processus

en ex´ecution

prˆet bloqu´e

Transitions entre ´etats en ex´ecution → bloqu´e:

S’il re¸coit l’ordre dedormir.

S’il a besoin d’uneressource non disponible.

en ex´ecution → prˆet :

S’il a´epuis´eson quantum detemps CPU.

prˆet→ en ex´ecution :

Sil’ordonnanceur lui donne la main.

bloqu´e → prˆet :

Si sontemps de sommeilest´epuis´e.

Si laressourcequ’il attendait s’estlib´er´ee.

(79)

Les threads Rappels

Les transitions entre ´ etats d’un processus

en ex´ecution

prˆet bloqu´e

Transitions entre ´etats en ex´ecution → bloqu´e:

S’il re¸coit l’ordre dedormir.

S’il a besoin d’uneressource non disponible.

en ex´ecution → prˆet :

S’il a´epuis´eson quantum detemps CPU.

prˆet→ en ex´ecution :

Sil’ordonnanceur lui donne la main.

bloqu´e → prˆet :

Si sontemps de sommeilest´epuis´e.

Si laressourcequ’il attendait s’estlib´er´ee.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 42 / 74

(80)

Les threads Les threads : des processus particuliers

Caract´ eristiques des threads

Un thread est un processus l´eger `a l’int´erieur d’un processus.

Un processus peut poss´eder plusieurs threads (multi-threading) : ex´ecution concurrente `a l’int´erieur d’un processus de plusieurs tˆaches.

Un processus poss`ede au moins un threadqui ex´ecute le programme principal, habituellement la fonction main().

(81)

Les threads Les threads : des processus particuliers

Threads vs. sous-processus

Diff´erences entre threads et sous-processus

Les sous-processusissus d’un mˆeme processus ont leur propre espace d’adressage et doivent, pour communiquer,utiliser des moyens de communicationsp´ecifiques (tubes).

Les threadsissus d’un mˆeme processus partagent les ressources allou´ees `a celui-ci : temps processeur, m´emoire (segments de code et de donn´ees).

Int´erˆet des threads

Communication tr`es simple(mais parfois dangereuse) grˆace aux donn´ees partag´ees.

Partage du tempsallou´e au processus p`ere entre plusieurs threads, chacun d’eux ex´ecutant une fonction pr´ecise.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 44 / 74

(82)

Les threads Les threads : des processus particuliers

Threads vs. sous-processus

Diff´erences entre threads et sous-processus

Les sous-processusissus d’un mˆeme processus ont leur propre espace d’adressage et doivent, pour communiquer,utiliser des moyens de communicationsp´ecifiques (tubes).

Les threadsissus d’un mˆeme processus partagent les ressources allou´ees `a celui-ci : temps processeur, m´emoire (segments de code et de donn´ees).

Int´erˆet des threads

Communication tr`es simple(mais parfois dangereuse) grˆace aux donn´ees partag´ees.

Partage du tempsallou´e au processus p`ere entre plusieurs threads, chacun d’eux ex´ecutant une fonction pr´ecise.

(83)

Les threads Les threads : des processus particuliers

Threads vs. sous-processus

Quand utiliser des threads ?

Lorsque l’application contient des tˆaches r´ep´etitives et/ou grosses consommatrices de temps CPU.

calculs animation

attente de connexions

Autres exemples

Un serveur peut r´epondre `a des demandes de connexion de clients en cr´eant un thread par client.

Le lancement de la machine virtuelle java lance un processus de base qui contient plusieurs threads :

le thread principal : celui qui ex´ecute lemain().

le thread d´edi´e au garbage collector.

le thread d´edi´e au traitement des ´ev´enements clavier et souris.

epartement R&T Programmation Java Avanc´ee 16 novembre 2016 45 / 74

Références

Documents relatifs

Le thread qui ex´ ecute wait() est mis dans un pool d’attente ; quand il en sort il “revient” dans le bloc synchronized et entre en comp´ etition avec d’autres threads pour

Cr´ eer une m´ ethode lancerThread (dans la classe principale) cr´ eant un Thread bas´ e sur le Runnable ci-dessus, et le d´ emarrant4. Dans une m´ ethode main, cr´ eer un objet de

1 M´ ethodes sp´ ecifiques aux Applets et qui leur permettent de demander au navigateur des informations ou des actions li´ ees au contexte : informations sur la page HTML

Dans le cas o` u vous utilisez un navigateur, forcez le rechargement de l’image (F5) car des param` etres de cache peuvent vous emp´ echer de voir les diff´ erences entre 2 ex´

Le fait que tout les objets d’une classe ne soient pas atteignable n’est pas suffisant pour d´ echarger une classe Chaque classloader poss` ede un cache de l’ensemble des

– ´ Ecrivez un code pour construire un Rapace qui h´ erite de Oiseau mais avec en plus la m´ ethode chasser.. Sans extends

Dans cette classe, ajouter une m´ ethode connecte, qui ` a l’aide d’une Socket se connecte au serveur correspondant ` a l’hˆ ote et au port, puis ferme la socket2. Afficher dans

Pour cela, on utilisera deux classes avec des m´ ethodes distantes, la classe Licencie et la classe Base.. D´ efinir une classe Licencie, ayant comme champs priv´ es un