Vous êtes sur la page 1sur 7

Rapport du mini-projet

Application client/serveur avec TCP

Présentation de la classe Etudiant.java

import java.io.Serializable;

public class Etudiant implements Comparable<Etudiant>{


String nom;
String prenom;
String specialité;
int moyenne;
Etudiant(String N,String P,String S, int M){//Initialisation des variables
this.nom=N;
this.prenom=P;
this.specialité=S;
this.moyenne=M;
}
String getNom() {//Retourne le nom
return nom;
}
int getMoy() {//Retourne la moyenne
return moyenne;
}
public String toString() {
return "Etudiant:"+nom+" "+prenom+" "+specialité+" "+moyenne;
}
@Override
La méthode ci-dessous permettra de faire une comparaison afin de trier le tableau
public int compareTo(Etudiant o) {
// TODO Auto-generated method stub
if(this.moyenne!=o.getMoy()) {
return this.moyenne-o.getMoy();
}
return this.nom.compareTo(o.getNom());
}

Présentation de la classe ServerEtudiant.java

Le serveur utilise deux (2) types de sockets :

 Un socket de connexion qui sert à attendre le client :


ServerSocket serveur = null;
serveur = new ServerSocket(1024); 1024 est le numéro de prt
 Un socket de communication comme son nom l’indique pour communiquer avec le client
Socket socket = serveur.accept();
ObjectOutputStream sockout = new ObjectOutputStream(socket.getOutputStream()): pour
l’emission des objets.
ObjectInputStream sock = new ObjectInputStream(socket.getInputStream()) :pour la réception
d’objets.
BufferedReader sockin = new BufferedReader(new InputStreamReader(socket.getInputStream()))
pour lire les chaines de caractère

PrintWriter soct = new PrintWriter(socket.getOutputStream(), true) pour envoyer les chaines de


caractère
Le serveur contient un tableau d’étudiant
Etudiant[] etudiant = { new Etudiant("Mao", "Koné", "RID", 15), new Etudiant("Amina", "Koné",
"CYSIA", 16), new Etudiant("Fatima", "koné", "RID", 18) };
ArrayList detu= new ArrayList(Arrays.asList(etudiant)) : conversion de la table etudiant en liste pour
pouvoir ajouter et supprimer car la liste a une taille dynamique.
Présentation de la classe ClientEtudiant.java
Le client utilise un seul socket de communication : socket=new Socket("localhost",1024);

sockout=new PrintWriter(socket.getOutputStream(),true) :pour l’émission de chaines de caractère ;


sockin=new ObjectInputStream(socket.getInputStream()) :pour la réception d’objets;
sock=new ObjectOutputStream(socket.getOutputStream()) :pour envoyer des objets;
soct= new BufferedReader(new InputStreamReader(socket.getInputStream())) :pour lire des chaines
de caractère;
I- Le client se connecte au serveur en envoyant le nom d’un étudiant et le serveur vérifie si ce
dernier est dans son tableau.
Etudiant[] t1= {new Etudiant("Mao","Koné", "RID", 15)};
System.out.println("Ajouter cet étudiant");
sock.writeObject(t1);
Côté serveur :
String recu1 ;
Etudiant[] e1=(Etudiant[])recu1;
for(int i=0;i<etudiant.length;i++)
if(etudiant[i].getNom().equals(e1[i].getNom()))
System.out.println("cet etudiant est déjà sur la liste");
else { detu.add(e1[i]);
System.out.println(detu);
soct.println("Etudiant ajouté"); }
Côté client :
String recu=soct.readLine();
System.out.println(recu);
Résultat : etudiant existant

Pour un étudiant qui n’est pas encore sur la liste

II-Le client se connecte au serveur en envoyant « Supprimer » et le nom d’un étudiant


Côté client :
Scanner scan=new Scanner(System.in);
System.out.println("Donner le nom de l'étudiant à supprimer");
String nom_et=scan.nextLine();
sockout.println(nom_et);
String recu;
while((recu=soct.readLine())!=null) { System.out.println(recu);
Côté serveur :
while((recu=sockin.readLine())!=null) {
System.out.println("recu:"+recu);
String nom=recu.trim();
for(int i=0;i<etudiant.length;i++)
if(etudiant[i].getNom().equals(nom)) {
detu.remove(i);
System.out.println(detu);
soct.println("Etudiant supprimé");
}
}
Sortie : client

Sortie : serveur

III-Le client se connecte au serveur en envoyant le nom d’un étudiant et le serveur répond par ses
informations
Côté client : Envoie du nom
Scanner scan=new Scanner(System.in);
System.out.println("Donner le nom d'un étudiant");
String nom_et=scan.nextLine();
sockout.println(nom_et);
Côté client : Réception de l’objet
Object recu=sockin.readObject(); if(recu==null)
System.out.println("Erreur de connection");
else { Etudiant etudiant=(Etudiant)recu;
System.out.println("serveur->client "+etudiant); }
Côté serveur 
while((recu=sockin.readLine())!=null) {
System.out.println("recu:"+recu);
String nom=recu.trim();
for(int i=0;i<=etudiant.length;i++)
if(etudiant[i].getNom().equals(nom)) {
sockout.writeObject(etudiant[i]);
break;
}}
Sortie :

IV-Le client se connecte au serveur en envoyant une spécialité et le serveur répond par un tableau
contenant uniquement les étudiants de cette spécialité.
Côté client : envoie de spécialité
Scanner scan=new Scanner(System.in);
System.out.println("Donner une spécialité");
String sp=scan.nextLine();
sockout.println(sp);
Côté client : réception :
for(int i=0;i<3;i++) {
Object recu=sockin.readObject();
if(recu==null)
System.out.println("Erreur de connection");
else { Etudiant etudiant=(Etudiant)recu;
System.out.println(etudiant); } }
Côté serveur :
while((recu=sockin.readLine())!=null) {
System.out.println("recu:"+recu);
String sp=recu.trim();
for(int i=0;i<etudiant.length;i++) {
if(etudiant[i].specialité.equals(sp))
sockout.writeObject(etudiant[i]); }}
Sortie :
V-Le client se connecte au serveur en envoyant un entier (entre 1 et 19) et le serveur répond par
tous les étudiants ayant une moyenne supérieure à ce nombre

Côté client :
Pour cela nous allons utiliser un générateur de nombre aléatoire
Scanner scan=new Scanner(System.in);
Random r=new Random();
int n=1+r.nextInt(19);
System.out.println(n);
sockout.println(n);

Object recu=sockin.readObject(); if(recu==null)


System.out.println("Erreur de connection");
else { Etudiant[]etudiant=(Etudiant[])recu;
for(int i=0;i<3;i++) {
System.out.println(etudiant[i]); } }
Côté serveur
Etudiant[] t=new Etudiant[3];
int moy=0;
while((recu=sockin.readLine())!=null) {
moy=Integer.parseInt(recu);
System.out.println("recu:"+moy);
for(int i=0;i<etudiant.length;i++) {
if(etudiant[i].moyenne>moy)
t[i]=etudiant[i]; }
sockout.writeObject(t);}
Sortie :
VI-Le client se connecte au serveur en envoyant « trier » et le serveur répond par le tableau trier
selon l’ordre décroissant de leurs moyennes.
Côté client :
sockout.print("trier");
Object recu=sockin.readObject();
if(recu==null)
System.out.println("Erreur de connection");
else {
Etudiant[] etudiant=(Etudiant[])recu;
for(int i=0;i<3;i++) {
System.out.println(etudiant[i]); } }

Côté serveur :
while((recu=sockin.readLine())!=null) {
System.out.println("recu:"+recu);
Arrays.sort(etudiant,Collections.reverseOrder());
System.out.println(Arrays.toString(etudiant));
sockout.writeObject(etudiant);}
Sortie :

Vous aimerez peut-être aussi