Bonjour,
Après avoir effectuer des recherches sur notre ami Google toujours pas de réponse à mon problème.
Je réalise une application Lambda client-serveur et pour lancer une instance de Lambda, il me faut deux clients. Donc à un moment donné le client 1 doit être en phase d'attente jusqu'à ce qu'un deuxième client se connecte sur le serveur.
Voila mon code serveur:
Au niveau du client, celui ci ouvre un formulaire de connexion et renseigner son nom, le serveur et le port de connexion.
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 ServerSocket serveur; InetAddress adresse_serveur; int port_serveur; serveur = new ServerSocket(8000); adresse_serveur = InetAddress.getLocalHost(); port_serveur = serveur.getLocalPort(); System.out.println("Serveur Lambda démarré..."); System.out.println("L'adresse du serveur est: "+adresse_serveur.getHostAddress()); System.out.println("Le port du serveur est: "+port_serveur); while (true) { Socket clientSocket1, clientSocket2; clientSocket1 = serveur.accept(); System.out.println("Connexion réussi pour 1er client"); clientSocket2 = serveur.accept(); System.out.println("Connexion réussi pour 2nd client"); PartieLambda partie = new PartieLambda( clientSocket1, clientSocket2); System.out.println("nouvelle partie créée"); }
Le soucis est que le readLine() (avant dernière ligne) est bloquant. Vous me direz c'est normal c'est un peu son rôle et d'ailleurs c'est ce que je souhaite car j'attends que le serveur me dises "Oui c'est bon, il y a deux clients". (cela se fait durant le:
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 BufferedReader fluxEntrant; Socket socket = null; int port_serveur = Integer.parseInt(port); InetAddress adresse_serveur = InetAddress.getByName(serveur); socket = new Socket( adresse_serveur, port_serveur); System.out.println("socket connecté : " + socket.getLocalPort()); f.setVisible(false); // On ferme la fênetre active (le formulaire) attente = new FenetreAttente("Morpion"); // On ouvre une fênetre avec un sablier en gif + un texte "Attente du client n°2 fluxEntrant = new BufferedReader(new InputStreamReader( socket.getInputStream())); System.out.print("attente signal début du serveur : "); String signal = fluxEntrant.readLine(); System.out.println(signal);
Le problème c'est que la fenêtre client (avec le gif et le texte) est buggée, elle apparait transparente et n'affichant ni le gif ni le texte. Tout redevient normal lorsque le 2eme client est connecté et que l'on a passé le readLine()
Code : Sélectionner tout - Visualiser dans une fenêtre à part PartieLambda partie = new PartieLambda( clientSocket1, clientSocket2);
Bilan: Comment faire pour que readLine ne soit pas bloquant au niveau de ma fênetre graphique ?
Merci de votre aide d'avance.
Partager