sourire05
Messages postés6Date d'inscriptionvendredi 28 décembre 2012StatutMembreDernière intervention 7 février 2014
-
Modifié par sourire05 le 28/11/2013 à 18:04
Bonjour,
Je voulait crée un programme qui permet de communiquer entre un serveur et 2 client.
les 2 client envoi un tableau au serveur, ce dernier reçoit les 2 tableau et les trie
en un seul tableau et le renvoi pour les 2 client .
mon problème c'est la synchronisation des thread au niveau de serveur , pour soit
le thread 1 attend le thread 2 pour trie les 2 tableau et envoi le résultat pour les 2 client.
//Cote serveur
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Server
{
public static void main(String[] zero) throws InterruptedException
{
ServerSocket socket;
try {
socket = new ServerSocket(2478);
//creé le thread
Thread t = new Thread(new Accepter_clients(socket));
t.start();
System.out.println("Mes employeurs sont prêts !");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class Accepter_clients implements Runnable
{
private ServerSocket socketserver;
private Socket socket;
private int nbrclient = 1;
private Boolean etat=Boolean.FALSE;
ObjectOutputStream out;
ObjectInputStream in ;
int [] tableauAEmettre ;
List<Object> liste = new ArrayList<Object>();
public Accepter_clients(ServerSocket s)
{
socketserver = s;
}
public synchronized void run() //pour un seul thread à la fois
{
try {
while(true)
{
socket = socketserver.accept(); // Un client se connecte onl'accepte
System.out.println("Le client numéro "+nbrclient+" est connecté !");
nbrclient++;
// lire le tableau reçoi
in = new ObjectInputStream(socket.getInputStream());
Object objetRecu= in.readObject();
tableauAEmettre= (int[]) objetRecu;
for( int i=0;i<tableauAEmettre.length;i++){
liste.add(tableauAEmettre[i]);
}
// List<Object> table=tri(liste);
//System.out.println("serveur recoit: " + table);
System.out.println("serveur recoit: " + liste);
if(!etat){
etat= Boolean.TRUE;
wait();// pour attend le thread 2
}
else{
notify();//débloquer le thread
}
List<Object> tabl=tri(liste);
out = new ObjectOutputStream(socket.getOutputStream());
out.flush();
out.writeObject(tabl);
out.flush();
System.out.println("serveur envoi: " + tabl);
out.close();
in.close();
socket.close();
}
//socketserveur.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//Fonction permet de trie les tableau
public static List<Object> tri(List<Object> tab)
{
for(int i=0;i<tab.size()-1;i++)
{
int min=i;
for (int j=i+1; j<tab.size(); j++)
{
if ((int)tab.get(j)<(int)tab.get(min))
{
min=j;
}
}
int AIDE;
AIDE=(int)tab.get(i);
tab.set(i,(int)tab.get(min));
tab.set(min,AIDE);
}
return (tab) ;
}
}
// Cote client1.java et client2.java
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
import java.util.Arrays;
public class Client {
public static void main(String[] zero) throws ClassNotFoundException{
Socket socket;
ObjectInputStream in;
ObjectOutputStream out ;
try {
socket = new Socket("localhost",2478);
out = new ObjectOutputStream(socket.getOutputStream());
out.flush();
int lower = 3;
int higher = 15;
int random = (int)(Math.random() * (higher-lower)) + lower;
int[] tableauAEmettre= new int[random];
for (int i=0;i<random;i++)
{
tableauAEmettre[i]=(int)(Math.random() * (40-0)) + 0;
}
out.writeObject(tableauAEmettre);
out.flush();
System.out.println("Client 1 envoi: " + Arrays.toString(tableauAEmettre));
in = new ObjectInputStream(socket.getInputStream());
Object objetRecu = in.readObject();
int[] tableauRecu = (int[]) objetRecu;
System.out.println("Client 1 recoit: " + Arrays.toString(tableauRecu));
in.close();
out.close();
socket.close();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}