Bonjour à tous.

Je suis actuellement en train de découvrir l'utilisation de socket en Java, et j'ai un petit probleme.

Voici les différentes parties de mon code :
Client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.net.Socket;
import java.net.UnknownHostException;
 
 
public class Client {
	Socket sock;
	String ipAddress;
 
 
	public Client(){
		ipAddress = "127.0.0.1";
		int port = 4242;
 
		try {
			System.out.println("Trying to connect on port :"+port +"a l'adresse ip :"+ipAddress);
			sock = new Socket(ipAddress, port);
			System.out.println("Connecté");
			DataInputStream dIS = new DataInputStream(sock.getInputStream());
			DataOutputStream dOS = new DataOutputStream(sock.getOutputStream());
			while(true)
			{
				InputStreamReader is = new InputStreamReader(System.in);
				BufferedReader bR = new BufferedReader(is);
				String str = bR.readLine();
				byte[] b = new byte[256];
				b = str.getBytes();
				if(str!=null){
					dOS.write(b);
					System.out.println("Message envoyé");
				}
 
			}
 
		} catch (UnknownHostException e) {
			System.out.println("The host has not been found");
		} catch (IOException e) {
			System.out.println("IO error");
			e.printStackTrace();
		}
 
	}
 
 
 
 
}
Serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
 
 
public class MasterServer {
	Vector<Thread> serverThreadVector;
	ServerSocket servSock ;
	boolean state = true;
	int nbConnection = 0;
	String sharedString;
 
	public MasterServer(){
		serverThreadVector = new Vector<Thread>();
		try {
			if(servSock==null){
				servSock = new ServerSocket(4242);
			}
			while(state){
				System.out.println("blabla");
				Socket client = servSock.accept();
				System.out.println("blabla");
				nbConnection++;
				Runnable sRunnable = new ServerThread(client, sharedString);
				Thread sThread = new Thread(sRunnable);
				serverThreadVector.add(sThread);
				sThread.run();
 
			}
		} catch (IOException e) {
			System.out.println("IO exceptions not handled");
			e.printStackTrace();
		} catch (Exception e){
			String msg = e.getMessage();
			for (Thread thr : serverThreadVector) {
				sharedString = msg;
				thr.interrupt();
			}
		}
	}
 
 
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
 
 
public class ServerThread implements Runnable {
	Socket clientSocket ;
	String sString;
	String oldSString;
	String servString;
	DataInputStream dIS;
	BufferedReader bR;
	DataOutputStream dOS;
	boolean state;
 
 
	public void setSString(String s){
		sString = s;
	}
 
	public ServerThread(Socket client, String sharedString) {
		clientSocket = client;
		servString = sharedString;
		oldSString = "";
		state = true;
		try {
			dIS = new DataInputStream(client.getInputStream());
			bR = new BufferedReader(new InputStreamReader(dIS));
			dOS = new DataOutputStream(client.getOutputStream());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
 
	}
 
 
 
	public void run() {
		while(state){
			try {
				Thread.sleep(10);
				while(true){
					byte[] b = new byte[256];
					dIS.read(b);
					String str = new String(b);
					System.out.println(str);
				}
			} catch (Exception e) {
				try {
					byte[] b = servString.getBytes();
					dOS.write(b);
				} catch (IOException e1) {
					System.out.println("Message non envoyé");
					e1.printStackTrace();
				}
			}
		}
	}
 
}
En lancant avec un seul client, j'arrive bien a ce que je veux, c'est a dire envoi/reception de message du client vers le serveur.
Lorsque je lance un second client, le comportement souhaité serait d'accepter la connexion sur un nouveau socket, de lancer un thread pour ce socket, et d'ajouter ce thread a un vecteur de thread.

Apparemment le second client crée bien son socket de communication, mais le serveur de rerentre jamais dans sa boucle d'attente de nouvelle connexion, donc je ne peux envoyer de message de mon second client.

Une idée de la ou je me serais planté en beauté ?

Merci d'avance