emission/reception su un client Java - Java - Programmation
Marsh Posté le 13-08-2007 à 14:54:12
j'ai pas mon code qui faisait ça sous la main, mais en gros c'était un thread par client qui ne s'occupe que de lire (le read est bloquant au passage, alors tu peut faire ton while(1) tranquile, ça va pas bouffer ton processeur, si c'est ça que tu entend par "légèreté" ) et qui renvoie l'info à un autre thread par un mécanisme de listener fait soit même
c'est très simple à faire, le thread bah il ne fait que lire
et en ce qui conscerne le listener, c'est jsute définir une interface et une collection dans ton thread pour stocker les listeners. Après tu implémente ton listener dans un autre thread comme tu le ferais normallement. La petite pointe de difficulté étant qu'il ne faut pas oublié de crée un nouveau thread pour chaque listener que tu appel dans ton thread de lecture du socket.
Marsh Posté le 13-08-2007 à 15:24:48
Mmh je résume
T'as un client, en 2 threads, 1 qui ne fait que lire, l'autre qui fait le reste (interface, envoi des commandes saisies par l'utilsiateur).
Le thread de lecture possède un listener que le thread principal peut utiliser avec ActionListener.
Si c'est ca, c'est ce à quoi je pensais au début avec les threads (à part que j'ai jamais touché aux listener fait maison, donc je voyais ca avec un appel à une méthode dans le thread principal pour l'affichage. si t'as un tuto bien fait pour les listener à portée de main je suis preneur ).
bon ben je me lance, merci bien pour ton aide
Marsh Posté le 13-08-2007 à 16:31:06
ça n'a rien de très compliqué, il suffit d'essayé de comprendre comme ça se passe avec les listeners habituel.
tu définie une interface "NetworkListener" qui possède une méthode, disons "networkEvent" avec en paramètre un objet contenant ce que tu veux transmettre à l'autre thread (soyons fou, disons que tu reçois directement des String, comme ça pas besoin de se créer un objet spécial pour l'exemple).
ton thread de lecture du socket va avoir cette gueule dans le run :
Code :
|
aux détails prés, je me souviens plus très bien comme on utlise les sockets (et doit y avoir un try catch à faire pour read pour capter les déco réseaux ou des trucs de ce genre).
ensuite, tu as la méthode fireNetworkEvent qui va se charger de lancer tout les event vers les listeners
Code :
|
avec
Code :
|
cette class pouvant très bien être déclaré directement dans ton thread de lecture
le must étant d'éxécuter fireNetworkEvent aussi dans un thread pour éviter de trop bloquer le thread de lecture.
enfin, pour enregistrer tes listeners :
Code :
|
je te laisse le choix dans la création de la collection (la plus banale suffira)
Ensuite, tu implémente ton NetworkListener comme tu le ferais avec un listener normal.
Et évidemment, comme tout autre listener, garde à l'esprit que ta méthode appelée dans ton listener par le thread de lecture est éxécuté dans un thread à part, et donc si tu as divisé ton appli en 2 thread au début, un qui lit le réseau, et l'autre qui fait le reste, et bien tu n'es pas dans le thread qui s'occupe de l'appli et tu dois donc gérer la synchronisation si ton "networkEvent (String)" doit modifier qqlch dans le reste de l'appli.
Marsh Posté le 13-08-2007 à 16:49:05
Ouah merci bien
Je regarde tout ca ce soir à tête reposée.
Marsh Posté le 13-08-2007 à 14:41:22
bonjour,
Voilà je suis en train de programmer pour moi même (pour me préparer aux cours que je vais avoir en septembre) un petit programme Java utilisant les sockets.
Il ne fait rien de particulier, c'est un Telnet quoi (je l'ai appelé JTelnet pour m'aperçevoir que le nom était pris d'ailleurs ) :
-> on donne un serveur et un port
-> on entre des commandes en meme temps que l'on affiche les infos reçues du serveur
C'est le 2e point qui blesse : je n'ai trouvé nulle part d'ActionListener me permettant de savoir si je viens de recevoir des données. Je pense bien pouvoir contourner ca avec des threads (un thread qui vérifie en permanence avec une boucle while l'arrivée ou non de données) mais j'aurais aimé savoir si il n'y a pas une solution plus simple, plus légère ... pour apprendre quoi
Avez vous un autre moyen que les threads pour y parvenir ?
Merci d'avance à ceux qui prendront le temps de me répondre
---------------
Les pièces jointes, c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas.