Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1703 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] envoyer un message simultanement aux clients

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] envoyer un message simultanement aux clients

n°953699
qxn
Posté le 15-01-2005 à 19:36:18  profilanswer
 

Bonjour,  
je pense que le titre est explicite mais je vais me repeter un peu : j'ai un serveur creer avec une serversocket qui accepte plusieurs clients maintenant j'aimerai bien envoyer un message simultanement a tout les clients et c'est la que mon probleme se situe ( j'ai deja vu le multicastsocket mais j'aimerai une methode avec des threads pour mieux comprendre (puis j'aimerai bien que ca marche hors lan surtout), sinon j'ai egalement réussis avec une queue de clients dans un vecteur mais la c'est plus simultané)  
 
voila le code de base du serveur :  
 

Code :
  1. import java.io.*;
  2. import java.net.*;
  3. class ServeOneClient extends Thread
  4. {
  5.     private Socket socket;
  6.     private BufferedReader in;
  7.     private PrintWriter out;
  8.     public ServeOneClient (Socket s) throws IOException {
  9.         socket =s;
  10.         in = new BufferedReader( new InputStreamReader( socket.getInputStream()));
  11.         out =new PrintWriter ( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())),true);
  12.         start();
  13.    
  14. }
  15. public void run()
  16. {
  17.     try {
  18.         while (true)
  19.         {
  20.             String str = in.readLine();
  21.             if (str.equals("END" )) break;
  22.             System.out.println("Recu :" +str);
  23.            
  24.             out.println("recu" );
  25.            
  26.         }
  27.         //System.out.println("fermeture" );
  28.     } catch(IOException e) {}
  29.     finally {
  30.         try {
  31.             socket.close();
  32.         } catch (IOException e) {}
  33.     }
  34. }
  35. }
  36. public class MultiClientServer
  37. {
  38.    static final int PORT =2112;
  39.    public static void main ( String[] args) throws IOException
  40.    {
  41.        ServerSocket s = new ServerSocket(PORT);
  42.        System.out.println("Server demarr" );
  43.        try {
  44.            while (true)
  45.            {
  46.                Socket socket = s.accept();
  47.        try{       
  48.            new ServeOneClient(socket);
  49.        } catch (IOException e) {
  50.            socket.close();
  51.        }
  52. }
  53. } finally {
  54.     s.close();
  55. }
  56.    }
  57. }


 
Si vous avez un conseil n'hesité pas ( meme si vous trouvez le code ci dessus un peu crade je suis a tout ouie)
 
Amicalement Qxn


Message édité par qxn le 15-01-2005 à 21:22:59
mood
Publicité
Posté le 15-01-2005 à 19:36:18  profilanswer
 

n°953722
benou
Posté le 15-01-2005 à 21:15:42  profilanswer
 

Citation :

public static synchronized void main ( String[] args)


 [:wam] je l'avais encore jamais vu celle là  :D  
 
C'est quel thread, enfin, c'est où dans ton programme le truc qui doit décider d'envoyer un message à tous les clients ?
 
sinon, l'idée est tout bête : il faut que tu enregistres tous tes "ServeOneClient " dans une Collection, et quand tu veux balancer un message à tous tes clients tu fais une simple boucle ....


---------------
ma vie, mon oeuvre - HomePlayer
n°953724
qxn
Posté le 15-01-2005 à 21:20:51  profilanswer
 

oops le synchronized est a viré biensur il est resté suite a des test farfelus lol  
 
 
en fait la ou j'envoi un message c'est le out.println(str); mais ca l'envoi a un seul client forcement  
 
 
Collection je connais pas mais j'ai deja fais avec un Vector mais dans une boucle c'est plus vraiment simultané ( si c'est comme le vector ou bien je me trompe ? )
 
merci de ton aide benou

n°953728
benou
Posté le 15-01-2005 à 21:41:27  profilanswer
 

t'as mal compris ma queston : je te demande pas où tu envois ton message à un client, je te demande qu'est ce qui va déclencher l'envoi d'un même message à tous tes clients. Faut bien qu'il y ait un truc qui le déclenche ....
 
ensuite, si tu fis de la socket, tu ne pourras pas avoir d'envoi réellement simultané ... mais ca revient quasiment au même : une boucle avec u tpint sur une socket ca se fait assez vite ...
 
(un Vector est une Collection)


---------------
ma vie, mon oeuvre - HomePlayer
n°953732
qxn
Posté le 15-01-2005 à 21:50:00  profilanswer
 

ce qui le declanche sera par exemple un client envoi au serveur un string "ALL" et puis il ecrit a tout le monde ALL ( c vraiment pour me faire la main quoi rien de precis)
 
bein la ca me decois un peu parce que je l'ai fais avec un Vector ( je savais pas que ca s'appeler collection aussi lol) mais je pensais que avec du multi thread on pourrai faire du vrai simultane :(

n°953733
benou
Posté le 15-01-2005 à 21:55:21  profilanswer
 

bha tu sais, ta carte reseau elle peut pas envoyer plusieurs paquets en même temps => au final c'est toujours du séquentiel ...
 
rien t'empeche dans créer un thread pour envoyer le message à chacun de tes clients , ca va plus ou moins paralléliser l'envoi, mais tu vas rien y gagner niveau perf (même y perdre à mon avis)
 
 
Vector c'est classe qui implémente l'interface Collection. regarde la javadoc ...


Message édité par benou le 15-01-2005 à 21:55:48

---------------
ma vie, mon oeuvre - HomePlayer
n°953755
qxn
Posté le 15-01-2005 à 23:47:07  profilanswer
 

et bien en fait maintenant que tu le dis j'aimerai parallelisé ca me parait plus logique pour etre "simultané" biensur on ne peut pas avoir de vrai simultaneité parce que j'imagine que un thread prends la main et apres l'autre etc mais en theorie c'est ca du simultané. si tu as un conseil ou des liens pour m'aider a parallelisé ce serveur ils seront les bienvenus :)

n°953810
benou
Posté le 16-01-2005 à 10:52:04  profilanswer
 

il est déjà parralélisé puisque tu traite chaque client dans un tread.
 
si ensuite tu veux pouvoir, depuis ton serveur, lancer un traitement parralèle sur tous tes clients, il suffit que tu lances ce traitement dans un nouveau thread à chaque fois ... => dasn ta boule sur tes clients, a la place de simplement envoyer le message, tu créés et lance un thread qui envoie le message ...
 
mais comme je te ds, pour moi, ca a pas d'intérêt ...
et pour optmiser un mnimum le mahin, faudrait pooler les threads ...


---------------
ma vie, mon oeuvre - HomePlayer

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] envoyer un message simultanement aux clients

 

Sujets relatifs
[JAVA] Comment faire un wait ?[Java/SNMP] Convertion MIB/XML
[Java]Projet Débutant / faisabilité[Java][JMF]Modification d'une vidéo
[Java] java.util.Random pas si random que ça :(Envoyer / Recevoir Fichier
eclipse et annotations de java 5[Java]Mysql+jtextarea+CR
[JAVA] RMI : Le serveur peut-il exécuter une fonction cliente ?Ou telecharger la java doc?
Plus de sujets relatifs à : [JAVA] envoyer un message simultanement aux clients


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR