salut tout le monde ,
je viens vers vous car j'ai besoin de votre aide j'ai un serveur qui gère deux clients en même temps et je voudrais interconnecter mes deux clients sans pour autant les transformer en serveur ou passer par le serveur ou si possible faire d'un client un autre serveurce qui me tracasse beaucoup
le but du projet est de permettre dans un premier temps au serveur qui joue le role de lanceur de synchronisation d'envoyer des processus(14) de façon aléatoire aux deux clients qui sont executeurs et qui hebergent les differents processus,des processus qui sont à la fois correcte ou bizantynes; ensuite les processus vont communiquer entre elles a travers les clients.
voici mes codes:
****************************************************************************
celui ci pour les client 1
****************************************************************************
import java.io.*;
import java.net.*;
import java.util.*;
public class EchoClient1 {
public static void main(String[] args) throws IOException{
Socket echoSocket = null;
Socket connexion = null;
PrintWriter out = null;
BufferedReader in = null;
PrintWriter out1 = null;
BufferedReader in1 = null;
String userInput;
String Client1 ="";
String message ="";
// Socket connexion = null;
BufferedReader stdIn = new BufferedReader( new
InputStreamReader(System.in));
BufferedReader stdIn1 = new BufferedReader( new
InputStreamReader(System.in));
boolean fini = false;
try{
echoSocket = new Socket("138.231.140.171",8189);
out = new PrintWriter(echoSocket.getOutputStream(),true);
in = new BufferedReader(new
InputStreamReader(echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Connection à l'hote impossible");
stdIn.read();
System.exit(1);
} catch (IOException e) {
System.err.println("Impossible d'associer un Flux au socket");
stdIn.read();
System.exit(1);
}
System.out.println("connection faite");
System.out.println("Message serveur: " + in.readLine());
/* //Créer une nouvelle socket et s'y connecte
try {
InetAddress addr = InetAddress.getByName(Client1);
connexion = new Socket(addr, 8189);
} catch (UnknownHostException e) {
} catch (IOException e) {}
//lire la socket
try {
in1 = new BufferedReader(new InputStreamReader
(connexion.getInputStream()));
message = in.readLine();
} catch (IOException e) {}
//affichage du message
System.out.println("Message: " + message);*/
while(fini == false){
userInput = stdIn.readLine();
if (userInput.equals("BY")) fini = true;
out.println("Client1 : "+ userInput);
System.out.println("Message serveur: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
***************************************************************************
pour le client 2
***************************************************************************
import java.io.*;
import java.net.*;
import java.util.*;
public class EchoClient2 {
public static void main(String[] args) throws IOException{
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
String userInput;
BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in));
boolean fini = false;
try{
echoSocket = new Socket("138.231.140.171",8189);
out = new PrintWriter(echoSocket.getOutputStream(),true);
in = new BufferedReader(new
InputStreamReader(echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Connection à l'hote impossible");
stdIn.read();
System.exit(1);
} catch (IOException e) {
System.err.println("Impossible d'associer un Flux au socket");
stdIn.read();
System.exit(1);
}
System.out.println("connection faite");
System.out.println("Message serveur: " + in.readLine());
while(fini == false){
userInput = stdIn.readLine();
if (userInput.equals("BY")) fini = true;
out.println("Client2 : "+ userInput);
System.out.println("Message serveur: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
***************************************************************************
le code du serveur
***************************************************************************
import java.io.*;
import java.net.*;
import java.util.*;
public class EchoServer1{
public static void main(String[] args){
String lin;
BufferedReader stdIn = new BufferedReader( new
InputStreamReader(System.in));
try{
ServerSocket s = new ServerSocket(8189);
System.out.println("serveur actif sur le port " + 8189);
while(true){
Socket echoSocket = s.accept();
String nom = echoSocket.getInetAddress().getHostName();
System.out.println(nom + " connecté");
Timer timer = new Timer();
timer.scheduleAtFixedRate( new TimerTask() {
public void run() {
System.out.println("time :" + System.currentTimeMillis());
}
}, 0, //s'execute a partir de maintenant
50000); //toutes les 50000 millisecondes
new ThreadProcessus(echoSocket).start();
}
}
catch(IOException e){ System.err.println(e); }
}
}
***************************************************************************
LA CLASSE THREADPROCESSUS
****************************************************************************
import java.io.*;
import java.net.*;
import java.util.*;
/*La classe Thread du package java.lang est celle qui doit impérativement
*être dérivée pour qu'une classe puisse être considérée comme un Thread et donc, exécutable en parallèle.
Cette classe concrète implémente l'interface Runnable.
Le code que vous désirez voir exécuté lors de l'activation doit donc être placé dans la méthode run() vue précédement.
*/
class ThreadProcessus extends Thread {
private Socket echoSocket;
private String lin;
public ThreadProcessus(Socket echoSocket){
this.echoSocket = echoSocket;
}
public void run(){
try{
BufferedReader in =new BufferedReader
(new InputStreamReader(echoSocket.getInputStream()));
PrintWriter out = new PrintWriter
(echoSocket.getOutputStream(),true /* autoFlush */);
out.println("Bienvenue sur ce server. Tapez BY pour sortir");
BufferedReader stdIn = new BufferedReader( new
InputStreamReader(System.in));
boolean done = false;
while(!done){
// c'est ici que le serveur recupere le message client
String line = in.readLine();
System.out.println("ECHO: " + line);
if(line == null) done = true;
else {
//out.println("Echo : " + line) ;
lin = stdIn.readLine();
out.println("Serveur :" + lin) ;
if (line.trim().equals("BY"))
done = true;
}
}
echoSocket.close();
}
catch (Exception e) { System.out.println(e);}
}
}