Exemple d'une application de chat a base de socket
-----------------------------------------------------
========> class Serveur
[java]
public class Serveur implements Serializable {
/***********************Partie Variable**********************************/
static Vector connexions = new Vector();
int idClients = 0;
/***La classe Service est un thread qui pourrait avoir l'allure suivante***/
public class Service extends Thread{
Socket sService; // la socket de service
// constructeur
public Service(Socket S){
sService=S;
}
// run
public void run(){
try{
// on crée les flux d'entrée-sortie
BufferedReader in=new BufferedReader(new InputStreamReader(sService.getInputStream()));
PrintWriter out=new PrintWriter(sService.getOutputStream(),true);
connexions.add(out);
// boucle demande - réponse
boolean fini = false;
String demande;
while (! fini){
// on lit la demande
demande=in.readLine();
// on l'envoie à tous les clients
for(int i = 0; i < connexions.size(); i++)
{
PrintWriter sout = (PrintWriter) connexions.get(i);
if(sService.isClosed()){
fini = true;
continue;
}
sout.println(demande);
}
}
// c'est fini
connexions.remove(out);
sService.close();
}catch(Exception e){
// on gère l'exception
System.out.println("Erreur ! "+e);
}// try
}// run
}
public Serveur() {
}
public void dialiguer(){
ServerSocket sEcoute = null;
try {
// ouverture du service
int portEcoute = 8080;
int maxConnexions = 10;
sEcoute = new ServerSocket(portEcoute, maxConnexions);
// traitement des demandes de connexion
boolean fini = false;
Socket sService = null;
while (!fini) {
// attente et acceptation d'une demande
sService = sEcoute.accept();
System.out.println("Connexion accpetée..." );
// le service est rendu par une autre tâche à laquelle on passe la socket de service
new Service(sService).start();
// on se remet en attente des demandes de connexion
//if(connexions.size()==0) fini=true;
}
// c'est fini - on clôt le service
sEcoute.close();
} catch (Exception e) {
// on traite l'exception
System.out.println("Erreur ! "+e);
}
}
}
[/java]
=========> Class Client
[java]
public class Client implements Serializable {
/***********************Partie Variable**********************************/
/***La classe Service est un thread qui pourrait avoir l'allure suivante***/
public class Service extends Thread {
Socket sService; // la socket de service
// constructeur
public Service(Socket S){
sService=S;
}
// run
public void run(){
try{
// on crée les flux d'entrée-sortie
BufferedReader in=new BufferedReader(new InputStreamReader(sService.getInputStream()));
// boucle demande - réponse
boolean fini = false;
String demande;
while (! fini){
// on lit la demande
demande=in.readLine();
System.out.println(demande);
// on l'envoie à tous les clients
if(sService.isClosed()) {
fini=true;
}
}
// c'est fini
sService.close();
}catch(Exception e){
// on gère l'exception
System.out.println("Erreur ! "+e);
}// try
}// run
}
private String pseudonyme;
public Client(String pseudo) {
pseudonyme = pseudo;
}
public void dialoguer(){
Socket sClient = null;
try {
// ouverture du service
sClient = new Socket("127.0.0.1", 8080);
// traitement des demandes de connexion
new Service(sClient).start();
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(sClient.getOutputStream(),true);
boolean fini = false;
String reponse;
while (!fini) {
// on se remet en attente des demandes de connexion
reponse = in.readLine();
out.println(pseudonyme+" : "+reponse);
if(reponse.equals("quitter" ))
fini=true;
}
// c'est fini - on clôt le service
sClient.close();
} catch (Exception e) {
// on traite l'exception
System.out.println("Erreur ! "+e);
}
}
}
[/java]
Manque que le main pour chaque class et ca devrait marcher.
J'espère que ca pourra t'aider
Message édité par Neomaven le 06-02-2010 à 05:22:51