Bonjour,
Dans le cadre du développement d'un jeu de plateau (plus précisément les fonctionnalités pour permettre à deux joueurs de jouer en réseau), je me trouve confronté à un petit problème auquel je ne trouve pas de solution.
Je m'explique :
J'ai d'un coté une interface GUI dans laquelle il y a un menu Server -> Create/Join
Voici le code de ce menu :
J'ai créé le server et le client dans un nouveau Thread pour empêcher l'interface de se figer.
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 /** * Classe d'interaction avec le menu */ public class MenuListener implements ActionListener { public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if (cmd == "Quit") { System.exit(0); } else if (cmd == "New Game") { plateau.newGame(); } else if (cmd == "About"){ new About(); } else if (cmd == "Help"){ new Help(); } else if (cmd == "Create"){ new Thread(new Server()).start(); } else if (cmd == "Join"){ new Thread(new Client()).start(); } }
Voici à présent les codes de Server et 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 public class Server implements Runnable{ public void run(){ try{ int port = 10022; ServerSocket sersoc = new ServerSocket(port); System.out.println("Système activé sur le port : "+port); while(true){ Socket soc = sersoc.accept(); InputStream in = soc.getInputStream(); BufferedReader entree = new BufferedReader (new InputStreamReader(in)); String message = entree.readLine(); System.out.println("message recu par le serveur = " + message); } } catch(Exception e){ System.out.println(e); } } }Et voici le problème rencontré : Quand je crée un serveur, tout se passe bien, quand je crée un client pour le rejoindre tout se passe bien. Mais le serveur bloque à l'instruction "sortie.readLine()" pendant 1 à 2 minutes avant d'afficher le "coucou" envoyé par le 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 public class Client implements Runnable { public void run() { try{ String hote = "127.0.0.1"; int port = 10022; Socket soc = new Socket(hote,port); OutputStream out = soc.getOutputStream(); OutputStreamWriter sortie = new OutputStreamWriter(out); sortie.write("coucou!"); sortie.flush(); } catch(IOException e){ System.out.println(e); } } }
De plus, quand je crée uniquement deux classes non liée et que je place le contenu des classes ci dessus dans une classe main, et que j'exécute, le coucou s'affiche immédiatement...
J'imagine que le problème se situe peut-être au niveau des différents Thread mais sinon je n'en ai vraiment aucune idée, et 30 secondes de "lag" avant le début de réception est assez gênant!
Merci d'avoir eu le courage de me lire et si vous avez une idée... N'hésitez pasD'avance merci!
Partager