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

  FORUM HardWare.fr
  Programmation
  Java

  Problème de réceptions Multicast

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de réceptions Multicast

n°1848417
kashimz
Posté le 07-02-2009 à 18:24:07  profilanswer
 

Bonjour,  
 
Je suis en train de programmer un client de messagerie instantanée en java en utilisant une MulticastSocket, mais j'ai quelques soucis au niveau de la réception des paquets : je les reçois bien en local mais les autres clients sur le réseau ne reçoivent que ceux appelés par la fonction déconnexion,
et je ne comprends pas du tout pourquoi  :??:  
 

Code :
  1. public class Reseau
  2. {
  3. private static MulticastSocket groupe_sock;
  4. private static DatagramSocket udp_sock;
  5. private static InetAddress groupe_ip;
  6. private static String ip_local;
  7. private static Vector liste_ip;
  8. private static Vector liste_label;
  9. private static Panel_connecte panel_co;
  10. private static boolean marche;
  11. public Reseau()
  12. {
  13.  try
  14.  {
  15.   set_ip_local();
  16.   connexion();
  17. // Envoi de l'ip local et du pseudo du client au groupe ( code 0 )
  18.   String msg = "0"+ip_local+"/"+Panel_accueil.get_pseudo()+"/";
  19.   envoyer_groupe(msg);
  20. // Mise en écoute de la socket Multicast sur le réseau et instanciation du tableau des adresses ips du groupe
  21.   liste_ip = new Vector();
  22.   liste_label = new Vector();
  23.   Ecoute_groupe ecoute_groupe = new Ecoute_groupe();
  24.   ecoute_groupe.start();
  25. // Mise en écoute de la socket UDP
  26.   Ecoute_udp ecoute_udp = new Ecoute_udp();
  27.   ecoute_udp.start();
  28. // Changement de fenêtre
  29.   changement_fenetre();
  30.  }
  31.  catch (UnknownHostException e1)
  32.  {
  33.   e1.printStackTrace();
  34.  }
  35.  catch (IOException e2)
  36.  {
  37.   e2.printStackTrace();
  38.  }
  39. }
  40. private void connexion() throws IOException
  41. {
  42.   marche = true;
  43. // Création d'une socket multicast pour rejoindre le groupe multicast
  44.   groupe_ip = InetAddress.getByName("224.0.0.1" );
  45.   groupe_sock = new MulticastSocket(2111);
  46. //Connexion au groupe multicast
  47.   groupe_sock.joinGroup(groupe_ip);
  48. // Création d'une socket UDP
  49.   udp_sock = new DatagramSocket(2112);
  50. }
  51. // Fonction permettant d'envoyer un paquet au groupe Multicast
  52. public static void envoyer_groupe(String data)
  53. {
  54.  try
  55.  {
  56.   DatagramPacket envoi = new DatagramPacket(data.getBytes(), data.length(), groupe_ip, 2111);
  57.   groupe_sock.send(envoi);
  58.  }
  59.  catch (IOException e)
  60.  {
  61.   e.printStackTrace();
  62.  }
  63. }
  64. // Fonction permettant d'envoyer un paquet à un client ciblé  
  65. public static void envoyer_qqn(String ip_dest, String data)
  66. {
  67.  try
  68.  {
  69.   DatagramPacket envoi = new DatagramPacket(data.getBytes(), data.length(), InetAddress.getByName(ip_dest), 2112 );
  70.   udp_sock.send(envoi);
  71.  }
  72.  catch (UnknownHostException e)
  73.  {
  74.   e.printStackTrace();
  75.  }
  76.  catch (IOException e)
  77.  {
  78.   e.printStackTrace();
  79.  }
  80. }
  81. public static void deconnexion()
  82. {
  83.  if(groupe_sock!=null)
  84.  {
  85.   try
  86.   {
  87. // On stoppe les threads d'écoute
  88.    marche = false;
  89. // Envoi d'un paquet au groupe pour signaler sa déconnexion ( code 1 )
  90.    String msg = "1"+ip_local+"/";
  91.    envoyer_groupe(msg);
  92. // Déconnexion du groupe
  93.    groupe_sock.leaveGroup(groupe_ip);
  94.    groupe_sock.close();
  95. // Fermeture de la socket UDP
  96.    udp_sock.close();
  97.   }
  98.   catch (IOException e)
  99.   {
  100.    e.printStackTrace();
  101.   }
  102.  }
  103. }
  104. // Fonction renvoyant l'ip de sa propre machine
  105. private void set_ip_local()
  106. {
  107.  try
  108.  {
  109.   ip_local = InetAddress.getLocalHost().getHostAddress();
  110.  }
  111.  catch (UnknownHostException e)
  112.  {
  113.   e.printStackTrace();
  114.  }
  115. }
  116. public static boolean get_marche()
  117. {
  118.  return marche;
  119. }
  120. public static DatagramSocket get_udp_sock()
  121. {
  122.  return udp_sock;
  123. }
  124. public static MulticastSocket get_groupe_sock()
  125. {
  126.  return groupe_sock;
  127. }
  128. public static String get_ip_local()
  129. {
  130.  return ip_local;
  131. }


 

Code :
  1. public class Ecoute_groupe extends Thread
  2. {
  3. public void run()
  4. {
  5.  byte[] buffer = new byte[501];
  6.  DatagramPacket rec = new DatagramPacket(buffer, buffer.length);
  7. // Tant que le client ne souhaite pas se déconnecter, le thread boucle afin d'être prêt à recevoir un paquet  
  8. // venant du groupe
  9.  while(Reseau.get_marche())
  10.  {
  11.   try
  12.   {
  13.    Reseau.get_groupe_sock().receive(rec);
  14.                                 System.out.println(new String(rec.getData()));
  15.    Reseau.traitement(rec);
  16.   }
  17.   catch (IOException e)
  18.   {
  19.    e.printStackTrace();
  20.   }
  21.  }
  22. }
  23. }


 

Code :
  1. public class Ecoute_udp extends Thread
  2. {
  3. public void run()
  4. {
  5.  byte[] buffer = new byte[501];
  6.  DatagramPacket rec = new DatagramPacket(buffer, buffer.length);
  7. // Tant que le client ne souhaite pas se déconnecter, le thread boucle afin d'être prêt à recevoir un paquet  
  8. // venant d'un client particulier  
  9.  while(Reseau.get_marche())
  10.  {
  11.   try
  12.   {
  13.    Reseau.get_udp_sock().receive(rec);
  14.                                 System.out.println(new String(rec.getData()));
  15.    Reseau.traitement(rec);
  16.   }
  17.   catch (IOException e)
  18.   {
  19.    e.printStackTrace();
  20.   }
  21.  }
  22. }
  23. }


Message édité par kashimz le 07-02-2009 à 18:26:18
mood
Publicité
Posté le 07-02-2009 à 18:24:07  profilanswer
 


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

  Problème de réceptions Multicast

 

Sujets relatifs
Behavior problème gestion souris molette + deplacementProblème pattern Decorateur FilterInputStream et classe de test.
probleme lors de l'envoie d'un email en phpZip, probleme de path
problème balayage de cellule en vbaVba else if probleme
[CSS] Probleme centrage texteProbleme mémoire / Ogre3D
problème avec oracleprobleme mysql
Plus de sujets relatifs à : Problème de réceptions Multicast


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