Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Joseph NDONG
Faculté des Sciences et Techniques
Département de Mathématiques et Informatique
Joseph NDONG UCAD DAKAR
SENEGAL 1
PLAN DU COURS
package thread.serveur;
import java.io.*;
import java.net.*;
//Cette classe multithreadré sert a traiter plusieur requetes clients a la fois
public class TCPserver extends Thread{
protected BufferedReader in;
protected PrintWriter pw;
private Socket soc;
String s;
/**cree un socket d’ecoute pour chaque client qui se connecte et on
initialise les deux fux d'I/O*/
public TCPserver (Socket soc) {
3
try {
this.soc = soc;
this.in = new BufferedReader
(new InputStreamReader(this.soc.getInputStream()));
this.pw= new PrintWriter (this.soc.getOutputStream(), true);
}
catch (Exception e) {err.println ( "Pb lors de l'ecoute"); }
}
/*lance le traitement de la requete pour le client qui se connecte*/
public void run (){
try {
// tant que le client n'a pa envoye une chaine le traitement ne demarre pas
try {
traitement ();
Thread.sleep(1000);
}
catch (InterruptedException e){
err.println("Interruption grave du processus");
} Joseph NDONG UCAD DAKAR
SENEGAL 4
}
catch (Exception er){}
}
/*pour recuperer la requete du client c a d la chaine envoyee*/
public String reception(){
String d=null;
try {
d=in.readLine();
return d;
}
catch (Exception e){
err .println("Erreur reading ...") ;e.printStackTrace();
return null;
}
}
else { out.println(s);
String revline=new StringBuffer(s).reverse().toString();
if (out != null)
pw.println("[Server Answer]>>> " + revline);
soc.close() ;//fermer a la fin du traitement
}
}
} Joseph NDONG UCAD DAKAR
SENEGAL 7
Exemple multiutilisateurs de Client TCP
package thread.client;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class TCPClienThread extends Thread {
Socket s;
Scanner entree=null;
BufferedReader sin =null;
PrintWriter sout =null;
public TCPClienThread (){}
public void run(){
try {
String line;
while (true) {
s = new Socket("localhost",2000);
Thread.sleep(1000);
}
public static void main (String[] args) {
// demarrage d’un client
new TCPClienThread ().start();
}
} 10
Exemple de mini serveur banquaire RMI
package rmibanque;
import java.rmi.RemoteException;
//interface distante
public interface Banque extends java.rmi.Remote {
public void creerCompte(String prenom, String nom, long numero, double solde,
double decouvert) throws RemoteException ;
public void retirer(long numero,double montant) throws RemoteException ;
public void deposer(long numero,double montant) throws RemoteException ;
public void imprimeHistorique(long numero) throws RemoteException ;
public double getDecouvert(long numero) throws RemoteException ;
public double getSolde(long numero) throws RemoteException ;
public long getNumero(long numero) throws RemoteException ;
// public Compte getCompteFromNumero(long numero) throws RemoteException ;
public boolean controlNumeroCompte(long numero) throws RemoteException ;
}
package rmibanque;
return clients;
}
/*ATTENTION: il ne faut pas faire la verif a partir de BDD, cela bloquerait le server
il faut plutot examiner les comptes disponibles dans le Hashtable.
En effet les methodes declarees dans l'objet distant ne doivent pas manipuler
JDBC(non serializable)*/
Compte cc=getCompteFromNumero(numero) ;
boolean b= false;
if (cc==null) b= true;
return b;
}
}
catch (Exception e){}
}
Joseph NDONG UCAD DAKAR
SENEGAL 16
public void deposer (long numero,double montant)throws java.rmi.RemoteException {
Object d=clients.get(numero+"");
Compte c=(Compte)d;
try{
//au lieu de faire c.deposer(montant); il faut plutot lancer un thead synchonise
// avec l operation de retrait puis retrait et depot ne doivent en aucun
//cas se passer simultanement
ThreadCompteDepot td= new ThreadCompteDepot(c, numero, montant);
td.start();
}
catch (Exception cd) {}
}
catch (Exception f){out.println("Connection impossible"); }
try {
st= ConnectBase.creerStatement(con);
rs1= st.executeQuery("select * from client") ;
if(rs1!=null)
while(rs1.next() ){
String o1=(String)rs1.getObject("prenom") ;
String o2=(String)rs1.getObject("nom") ;
long o3=Long.parseLong(rs1.getObject("numero")+"") ;
// double o4=Double.parseDouble(rs2.getObject("solde")+"") ;
// double o5=Double.parseDouble(rs2.getObject("decouvert")+"") ;
BanqueImpl.clients.put(o3+"",new Compte
Joseph NDONG UCAD(o1,o2,o3,0,0))
DAKAR ;
SENEGAL 21
}
}
catch (Exception f){out.println(" Error extrait clients BD "+f.getMessage() );
f.printStackTrace(); }
try{
rs1.close();
// rs2.close();
st.close() ;
con.close() ;
}
catch (Exception e){}
return BanqueImpl.initCompteClients();
}
}
catch (Exception f){out.println("Connection impossible"); }
try{
st= ConnectBase.creerStatement(con);
st.executeUpdate("Insert into client VALUES ('"+prenom+"','"+nom+"','"+numero+"')") ;
st.executeUpdate("Insert into compte VALUES ('"+numero+"','"+solde+"','"+decouvert+"')")
;
}
Joseph NDONG UCAD DAKAR
SENEGAL 23
catch (Exception f){out.println (null,"Statement Error"); }
try{
st.close() ;
con.close() ;
}
catch (Exception e){}
}// fin de la methode enregClientBase
}
catch(Exception f){out.println(null,"Connection impossible"); }
try{
st= ConnectBase.creerStatement(con);
st.executeUpdate("UPDATE compte SET solde='"+ solde+"'where numero='"+numero +"'");
}
catch(Exception f){out.println(null,"Statement Error"); }
REMARQUE
Vous créerez la classe utilitaire ConnectBase qui gère l’accès à votre BD. Vous pouvez
aussi créer un exemple simple de client sous forme console ou sous forme GUI.
java.rmi.Naming.rebind("rmi://localhost/comptejoe", bi);
out.println(" serveur banque demarre !!!");
}
catch (Exception er){err.println("Erreur serveur : "+er.getMessage() );
err.println("Erreur serveur STACK TRACE: " );er.printStackTrace() ;
}
}
Joseph NDONG UCAD DAKAR
SENEGAL 27
public void start(){
Thread t= new Thread (this);
t.start ( ) ;
}
public static void main(String[ ] args) throws java.rmi.RemoteException {
System.setSecurityManager (new RMISecurityManager ( )) ;
try{
}
catch (Exception e){out.println("Erreur Thread : "+e.getMessage ( ) ); ;}
}