Communication entre threads [Résolu & Code Source Final] - Java - Programmation
Marsh Posté le 20-01-2005 à 19:34:27
J'ai eu le meme souci:
http://forum.hardware.fr/hardwaref [...] 3146-1.htm
Je parle pas java, mais l'idée doit être la même.
Marsh Posté le 20-01-2005 à 19:44:17
hum, nan, ca m'aide pas trop, en faite si on compare au processus UNIX, j'aimerais parler au père... Voiçi le code si ca peut vous aider à comprendre.
Voici le serveur:
Code :
|
La connexion se passe par l'envoi d'instance de la classe String avec le message à l'interieur (je pense passer une classe perso plus tard avec un pseudo et le message, enfin bon...)
En faite, quand un thread recçois une instance de la classe String, il doit l'envoyer au père, et le père doit l'envoyer à tous ses threads. (Pour l'envoi, je sais comment faire, un vecteur de thread et hop c'est bon) mais pour passer cette String au père je vois pas du tout comment faire...
Marsh Posté le 20-01-2005 à 19:50:25
il faut que tu enregistres tes ListenThread dans une collection au niveau du serveur et que tu passes une référence du serveur lors de la construction di listenthread.
=> quand depuis le ListenThread tu veux balacner un message au serveur, tu appelles une méthode sur le serveur qui feras une boucle sur tous les clients pour envoyer le message.
(attention à la synchronisation de la collection)
Marsh Posté le 20-01-2005 à 19:50:34
cf : http://forum.hardware.fr/hardwaref [...] 2820-1.htm
Marsh Posté le 20-01-2005 à 19:59:38
J'avais lu l'autre topic déjà. Il faut que je passe par référence, mais il me semblait qu'il n'y avait pas de pointeur en java?! Avec mes (faibles) connaissances, je comprends qu'il faudrait que je fasse par exemple:
new ListenThread(connection, this);
et que ListenThread attende un ServerSocket en paramètre a l'instanciation et ensuite je crée un méthode qui 'for each' ListenThread execute la methode d'envoi du message?
ai-je bien compris ?
Marsh Posté le 20-01-2005 à 20:09:09
tout à fait.
et c'est pas qu'il n'y a pas de pointeur en java, c'est que tu ne les manipules pas directement. En fait, toutes les variables d'objetsont des pointeurs...
Marsh Posté le 20-01-2005 à 20:11:57
hum oki! j'aurais appris quelquechose today
et bien je te remercie grandement car je ne voyais pas du tout comment faire
Marsh Posté le 21-01-2005 à 08:23:54
Le problème étant résolu, voilà mon résultat, il y a plein de problème mais la connection/déconnection fonctionne correctement.
Le code de l'interface a été généré avec NetBeans donc pas forcement optimisé. Un autre problème est quand on ferme le serveur, il se cache uniquement et reste dans la liste des processus. Il faut aussi mettre les bon import car la j'ai mis * pour pas avoir à m'y soucier.
(Je ne demande pas de solution aux problème, c'est juste si ca peut servir de base à certain)
//--------------------------------------------
//ListenServer.java
//--------------------------------------------
Code :
|
//--------------------------------------------
//ListenThread.java
//--------------------------------------------
Code :
|
//--------------------------------------------
//Client.java
//--------------------------------------------
Code :
|
Marsh Posté le 21-01-2005 à 08:40:17
benou a écrit : tout à fait. |
des references plutot ...
Marsh Posté le 21-01-2005 à 11:25:35
et c'est quoi une référence si ce n'est l'adresse mémoire où les données de l'objet sont stockées
Marsh Posté le 21-01-2005 à 11:51:31
benou a écrit : et c'est quoi une référence si ce n'est l'adresse mémoire où les données de l'objet sont stockées |
une chose est sure, c'est pas un pointeur
Marsh Posté le 21-01-2005 à 12:04:24
Reply
Marsh Posté le 20-01-2005 à 18:22:51
Bonjour, je suis en train de faire une sorte de logiciel de communication entre plusieurs pc. J'ai donc créé la classe Server qui ecoute sur un port et créer des threads dès qu'un client se connecte. Pour l'instant ca va, le serveur affiche les messages reçu dans la fenetre de log. Le problème, c'est comment faire pour l'envoyer à tous les autres clients? car je ne vois pas comment passer un élément du thread au programme serveur (celui qui a créer la thread)... Si quelqu'un a la solution ou une idée algo pour m'aider, ca serait sympa
merci , loiklo
Message édité par loiklo le 21-01-2005 à 08:26:12