Bonjour à tous,
Pour un projet en licence, je dois réaliser une application java.
Le principe est le suivant:
Un serveur (multithreadé), X clients.
Le serveur est a l'écoute de tous les clients, et un client peut envoyer un message a un autre client.
Donc dans chaque thread, on a un PrintStream pour ecrire au client et un BufferedReader pour l'écouter
Voici un bout de code:
Dans le serveur je stock tous les clients avec leur printstream et bufferedReader respectif dans un MAP. Et dans la méthode 'traitementRequete', je récupère
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 while (true) { try { String requete = litSock.readLine(); traitementRequete(requete); } catch(IOException e) { System.out.println("Probleme avec le client"); return; } }
le printStream du client auquel on veut envoyer un message et je fait un println(message) sur cette printStream.
le probleme c'est que la socket du client auquel on veut parler est rester dans la boucle principal bloqué sur le readLine(), et que le println(message) bloque.
Une fois que l'on débloque le readLine(), le client recoit bien le message mais pas avant, Hors on me demande un dialogue asynchrone, donc le client doit pouvoir recevoir des message a tous moment.
Et c'est la que je suis perdu ! Comment faire pour que le message soit recu immédiatement par un client meme si il est blocké sur le readLine () ... ???
Merci pour votre aide.
![]()
Partager