Vous êtes sur la page 1sur 5

22-01-2015

Contrôle 2 DAI-DSI2 (corrigé)


Partie1 : JAVA
1. Classe Ouvrage
public class Ouvrage {
private String auteur;
private String titre;
private String code;
private static int cptOuvrages;
public Ouvrage(String titre, String auteur){
this.titre = titre;
this.auteur = auteur;
cptOuvrages++;
code= cptOuvrages+this.auteur;
}
public String getCode(){
return code;
}
public String toString(){
return titre+"-- "+code;
}
}
2. Classe Bibliotheque

import java.util.ArrayList;
import java.util.ListIterator;

public class Bibliotheque {


private ArrayList<Ouvrage> lesOuvrages;
private ArrayList<Ouvrage> OuvragesEmpruntes;
public Bibliotheque() {
lesOuvrages=new ArrayList<Ouvrage>();
OuvragesEmpruntes = new ArrayList<Ouvrage>();
}
public void ajoutOuvrage(String titre, String auteur){
Ouvrage unOuvrage = new Ouvrage(titre,auteur);
lesOuvrages.add(unOuvrage);
}
public void afficheTous(){
ListIterator<Ouvrage> it=lesOuvrages.listIterator();
while(it.hasNext())
System.out.println(it.next());
}
public void afficheEmpruntes(){
ListIterator<Ouvrage> it=OuvragesEmpruntes.listIterator();
while(it.hasNext())
System.out.println(it.next());
}
public Ouvrage getOuvrage(String code){
for(int i=0; i<lesOuvrages.size(); i++)
if ((lesOuvrages.get(i).getCode()).equals(code))
return lesOuvrages.get(i);
return null;
}
public boolean estEmprunte(Ouvrage o){
for(int i=0; i<OuvragesEmpruntes.size(); i++)
if (OuvragesEmpruntes.get(i).getCode().equals(o.getCode()))
return true;
return false;
}
public void emprunte(String code){
Ouvrage unOuvrage=this.getOuvrage(code);
if(!estEmprunte(unOuvrage)) {
OuvragesEmpruntes.add(unOuvrage);
}
}
public ArrayList<Ouvrage> getTousLesOuvrages(){
return lesOuvrages;
}
public ArrayList<Ouvrage> getTousLesEmprunts(){
return OuvragesEmpruntes;
}

}
3. Classes Livre et Disque

public class Livre extends Ouvrage{


private long isbn;
public Livre (String titre, String auteur, long isbn){
super(titre,auteur);
this.isbn = isbn;
}
public String toString(){
return super.toString()+"--"+isbn;
}
}

public class Disque extends Ouvrage{


private String type;
public Disque (String titre, String auteur, String type){
super(titre,auteur);
this.type = type;
}
public String toString(){
return super.toString()+"--"+type;
}
}
4. Classes TestBibliotheque

import java.util.ArrayList;
public class TestBibliotheque {

public static void main(String[] args) {


Bibliotheque B = new Bibliotheque();
B.ajoutOuvrage("JAVA", "EL ALAMI");
B.ajoutOuvrage("VB", "HARRANE");
ArrayList<Ouvrage> ouvr;
ouvr = B.getTousLesOuvrages(); // On récupère tous les ouvrages
B.emprunte(ouvr.get(1).getCode()); // empruntés le deuxième ouvrage
System.out.println("Liste des ouvrages : ");
B.afficheTous();
System.out.println();
System.out.println("Liste des ouvrages empruntes : ");
B.afficheEmpruntes();
}
}
Partie2 : DACS
1- Questions de cours :
a. Définir le RPC, expliquer brièvement son fonctionnement ? (2 pts)
Définition : Remote Procedure Call (RPC) : technologie permettant l’exécution de
procédures situées dans des environnements distants.
Fonctionnement :
1. Un RPC est initié par le client qui envoie un message de requête à un serveur
distant connu pour exécuter une procédure spécifique avec des paramètres
spécifiques.
2. Le serveur distant exécute une procédure locale avec les paramètres de la requête.
3. Le serveur envoie la réponse au client et l'application continue son déroulement.
4. Pendant que le serveur traite l'appel, le client est bloqué (il attend que le serveur
ait terminé son traitement sur les données).
b. Définir une Socket. Quelle est la différence entre socket TCP et UDP ? (2 pts)
Une Socket (prise) : un canal de communication (élément logiciel) permettant à un
processus d’envoyer ou recevoir des données.

Une socket TCP permet d’établir une communication en mode connecté. Si la connexion
interrompue l’application est informée.

Par contre

Une socket UDP permet d’établir une communication en mode non connecté. Données
envoyées sous forme de paquets indépendants de toute connexion. Mais plus rapide, et
moins fiable que TCP.

c. Expliquer la différence entre serveur itératif et serveur concurrent ? (2 pts)


Le serveur itératif gère un seul client à la fois, parce que les demandes de connexion
sont satisfaites l'une après l'autre.
Par contre
Le serveur concurrent est capable de gérer plusieurs clients simultanément à l’aide des
threads
2- Programme coté client : (6 pts)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {

public static void main(String[] args) {


try {
Socket s=new Socket("localhost",2015);
BufferedReader clavier=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Entrer le code du livre:");
String codeLivre=clavier.readLine();
clavier.close();
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
BufferedReader br=new BufferedReader(new
InputStreamReader(s.getInputStream()));
pw.println(codeLivre);
String rep=br.readLine();
System.out.println("La description est:"+rep);
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}

3- Programme coté serveur : (6 pts)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.ListIterator;

public class Serveur {

public static void main(String[] args) {


try {
ServerSocket ss=new ServerSocket(2015);
/**----------------------------------***/
Bibliotheque Biblio=new Bibliotheque();
Biblio.creer();
ArrayList<Ouvrage> B=new ArrayList<>();
B=Biblio.getTousLesOuvrages();
/**------------------------------------***/
while(true){
Socket s=ss.accept();
System.out.println("un client est connecté!!");
BufferedReader br=new BufferedReader(new
InputStreamReader(s.getInputStream()));
PrintWriter pw=new
PrintWriter(s.getOutputStream(),true);
String code=br.readLine();
String res="n'existe pas!!!";
ListIterator<Ouvrage> it=B.listIterator();
while(it.hasNext()){
Ouvrage o=it.next();
if((o.getCode()).equals(code)){
res=o.toString();
}
}
System.out.println("j'ai envoyé la reponse au client");
pw.println(res);
s.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

4- Si on veut que le serveur traite simultanément plusieurs clients à la fois, qu’elle est la
solution convenable (on ne demande pas le code) ? (2pt)
Utilisation des threads

Vous aimerez peut-être aussi