Vous êtes sur la page 1sur 6

ISTIC TP

Systèmes Répartis

TP 1: Socket TCP/IP

Application 1: Echange de messages


Ecrire une application Client/Serveur basée sur les sockets TCP/IP permettant d’échanger des
messages lus au clavier jusqu’à l’envoi de la chaine « fin » par le client.
NB : Le client commence la discussion.
/*
Classe Serveur
*/

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Serveur {


public static void main(String[] args) {
final int port = 2020;
try{
ServerSocket serveur = new ServerSocket(port);//enregistrement
de service
System.out.println("Started");
while(true)
//boucle pour traiter plusieurs clients séquentiellement
{
Socket socket = serveur.accept();
/* accept: attente jusqu'à la réception d'une demande de connexion de
client.
Si un client envoie une demande, la méthode accept renvoie un socket
servant à l'échange de données entre le serveur et ce client.
*/
System.out.println(socket.getPort()+"connecté");
//affichage du port du client connecté

//réception message

InputStream in = socket.getInputStream();
// Récupération du flux de lecture (flux entrant) manipulant des octets
InputStreamReader reader = new InputStreamReader(in);
// Conversion en flux manipulant des caractères
BufferedReader istream = new BufferedReader(reader);
//conversion en flux manipulant des chaines de caractères

while(true){
//boucle pour échanger plusieurs messages avec le même client
String line = istream.readLine();
//Récupération de la chaine envoyée par le client
System.out.println("S Client a dit :"+line);//affichage

if(line.equals ("fin")){
//condition d'arrêt si la chaine envoyée par le client est "fin"

Page 1
ISTIC TP
Systèmes Répartis

socket.close();//on ferme le socket coté Serveur


System.out.println("Fin connexion!"); //affichage
break;
/*Exit de la deuxième boucle d'échange de messages pour passer au client
suivant*/
}
//envoi message
System.out.println("S Taper votre message : ");
Scanner sc = new Scanner(System.in);
//Préparer l'outil de lecture au clavier
String str = sc.nextLine();
//Récupération de la chaine lue au clavier
OutputStream out = socket.getOutputStream();
//Récupération de flux d'écriture (flux sortant) manipulant des octets
PrintWriter ostream = new PrintWriter(out);
//Conversion en flux manipulant des chaines de caractères
ostream.println(str);
//écriture de la chaine saisie au clavier sur le flux sortant
ostream.flush();}
//envoi effectif de données sur le flux sortant
}
}catch(IOException e){

}
}

/*
Classe Client
*/

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {


public static void main(String[] args) {
final int port = 2020;
//le port doit être le même que celui proposé par le serveur
try{
Socket socket = new Socket(InetAddress.getLocalHost(),port);
/*demande de connexion au serveur qui se trouve dans ce cas
sur la même machine (LocalHost)*/

//envoi message
OutputStream out = socket.getOutputStream();
PrintWriter ostream = new PrintWriter(out);
while(true)
{

System.out.println("C Taper votre message : ");


Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println("C vous avez ecrit : "+str);
ostream.println(str);
ostream.flush();
if(str.equals ("fin"))

Page 2
ISTIC TP
Systèmes Répartis

{socket.close();
System.out.println("Fin connexion!");
break;}

//reception message
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
System.out.println("C Le serveur a dit : " +in.readLine());
}
}catch(IOException e){

}
}

Application 2 : Transfert d’objets


Notre objectif est d’écrire une application Client/Serveur basée sur les Sockets TCP/IP
permettant de calculer le prix de vente d’une voiture. Pour ce faire, implémenter:
- La classe Voiture ayant comme attributs :
Marque (String), PrixAchat (float), km (int) et PrixVente (float),
-Le client qui permet de saisir la marque, le prix d’achat et le kilométrage pour créer une
instance de voiture à envoyer au serveur,
-Le serveur qui calcule le prix de vente de l’instance reçue par la formule suivante:
PrixVente = PrixAchat – (km *0.15) et renvoie l’instance au client.
A la réception, le client affiche le prix de vente de l’instance reçue et se déconnecte.

import java.io.Serializable;

/**
*
* @author fahima
*/
public class Voiture implements Serializable{
private String Marque;
private float PrixAchat;
private float PrixVente;
private int km;

public Voiture(String Marque, float PrixAchat, int km) {


this.Marque = Marque;
this.PrixAchat = PrixAchat;
this.km = km;
}

public String getMarque() {

Page 3
ISTIC TP
Systèmes Répartis

return Marque;
}

public void setMarque(String Marque) {


this.Marque = Marque;
}

public float getPrixAchat() {


return PrixAchat;
}

public void setPrixAchat(float PrixAchat) {


this.PrixAchat = PrixAchat;
}

public float getPrixVente() {


return PrixVente;
}

public void setPrixVente(float PrixVente) {


this.PrixVente = PrixVente;
}

public int getKm() {


return km;
}

public void setKm(int km) {


this.km = km;
}

public class ServeurVoiture {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(3000);
while (true)
{
Socket s=ss.accept();

try {
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Voiture v=(Voiture)ois.readObject();
System.out.println(v.getMarque());

v.setPrixVente((float) (v.getPrixAchat()-v.getKm()*0.15));

Page 4
ISTIC TP
Systèmes Répartis

ObjectOutputStream oos=new
ObjectOutputStream(s.getOutputStream());
oos.writeObject(v);
oos.flush();
s.close();

} catch (ClassNotFoundException ex) {

Logger.getLogger(ServeurVoiture.class.getName()).log(Level.SEVERE, null, ex);


}

}
// TODO code application logic here
} catch (IOException ex) {
System.out.println(ex.getStackTrace());
}
}

public class ClientVoiture {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {

try {
Socket s=new Socket(InetAddress.getLocalHost(),3000);

ObjectOutputStream oos=new
ObjectOutputStream(s.getOutputStream());
Scanner sc=new Scanner (System.in);
System.out.println("donner la marque");
String m=sc.nextLine();
System.out.println("donner le prix de vente");
float pa=sc.nextFloat();
System.out.println("donner le kilométrage");
int km=sc.nextInt();
Voiture v=new Voiture (m,pa,km);
oos.writeObject(v);
oos.flush();

ObjectInputStream ois=new
ObjectInputStream(s.getInputStream());
Voiture v1=(Voiture)ois.readObject();
System.out.println("Le prix de vente "+v1.getPrixVente());
s.close();
} catch (ClassNotFoundException ex) {

Logger.getLogger(ClientVoiture.class.getName()).log(Level.SEVERE, null, ex);


}

// TODO code application logic here


} catch (IOException ex) {

Page 5
ISTIC TP
Systèmes Répartis

System.out.println(ex.getStackTrace());
}
}

Page 6

Vous aimerez peut-être aussi