IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Socket en UDP - Multicast - Chat - Problème.


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut Socket en UDP - Multicast - Chat - Problème.
    Bonjour,

    confronté à un nouveau petit problème :

    J'ai un CHAT qui fonctionne avec Socket en UDP et qui permet de faire l'envoi des messages en MULTICAST à l'adresse : 234.5.5.10

    C'est simple, mes clients CHAT se connectent à un manager via une socket TCP, en s'identifiant Login#password.
    Le manager fait des accès à une BD oracle, qui recherche la validité des accès.
    Si les accès sont valable, le manager renvoie : l'adresse et le port multicast.
    Une fois l'adresse multicast (234.5.5.10) et son port (27010) renvoyé au client, ce dernier se connecte par une socket UDP, rejoignant le même groupe que les autres.

    Le probleme :
    - En local, sur le même PC, tout fonctionne nickel !
    - En réseau cablé ou wifi (peu importe), sur 2 pc différents, la connexion socket TCP se fait correctement, l'authentification également, mais lors de l'envoi des messages, les clients ne peuvent pas recevoir les messages du correspondant.

    En gros, uniquement les clients sur le meme pc peuvent voir les dialogues inter-clients. De PC à PC, cela ne fonctionne pas.

    Pouvez-vous me dire pourquoi ? Y'aurait-il une manipulation que j'aurais oubliée ?

    Merci d'avance.

  2. #2
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Suis-je dans la bonne section du forum, ou je rêve et aucune personne ici présente n'a jamais programmé avec des socket en java ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Par défaut
    si j'ai bien suivi ton raisonnement, tu as 4 sockets d'ouvertes:
    _2 en TCP pour l'envoi et la réception des messages d'authentification
    _2 en UDP pour l'envoi et la réception des messages de base

    c'est ça?

  4. #4
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Non, j'ai 2 Sockets (une en TCP, une en UDP) ... pour chacun des client.

    Mais bon, on peut faire abstraction de la socket TCP qui elle, fonctionne très bien.

    C'est la Socket UDP pour moi qui pose probleme.

    Quand je lance X clients sur la meme machines, ils recoivent tous les messages qu'ils envoient (le but d'un chat), mais dès que je passe sur 2 machines différentes et que j'essaye de les faire communiquer, cela ne fonctionne plus.

    - Les clients sur la machine A voient leur messages. (192.168.1.2/24)
    - Les clients sur la machine B voient leur messages. (192.168.1.3/24)
    - Les clients de la machine A ne voient pas les messages des clients de la machine B. (et vice-versa).

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Par défaut
    Désolé si je me fais lourd, mais je pense vraiment (avec les léléments que tu as fournis) que ton problème vient de tes sockets.
    Essaie dans un premier temps de les différencier en faisant une communication point à point distante; puis dans un deuxième temps (quand le premier point fonctionnera) utilise les sockets multipoints (Class MulticastSocket) tu verras que c'est super simple à mettre en place et que ça ne pose vraiment pas de difficulté (surtout en réseau local).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    try {
         MulticastSocket ms = new MulticastSocket(4000);
         InetAddress ia = InetAddress.getByName("192.168.1.1");
         ms.joinGroup(ia);
         byte[] tampon = new byte[8192];
         while(true) {
              DatagramPacket dp = new DatagramPacket(tampon,tampon.length);
              String s = new String(dp.getData(), "8859_1");
              System.out.println(s);
         }
    }
    catch(IOException ie) {
         System.err.println(ie);
    }

  6. #6
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    C'est bien de cette manière que je procède, en effet.

    Avec la classe MulticastSocket, InetAddress, en faisant le joinGroup, etc ...

    Sur le même pc, ca fonctionne mais pas de PC en PC.

  7. #7
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    La différence, c'est que je mets l'adresse : 234.5.5.10 comme adresse de multicast, sur laquelle tous les clients font leur join !

    Quelqu'un a une idée ?

    Merci d'avance.

  8. #8
    Invité de passage
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 1
    Par défaut mauvaise nouvelle
    J'ai une mauvaise nouvelle pour toi : le multi-cast ne fonctionne pas sur internet...

    pour citer wikipedia :
    L'usage du multicast sur Internet est encore limité aux universités ou utilisé en interne par les fournisseurs d'accès Internet (diffusion des chaînes de télévision pour certains).

    Certaines webradio expérimentent un flux multicast pour la diffusion de leurs programmes.
    http://fr.wikipedia.org/wiki/Multicast

    Il faudrait vraiment avoir un fournisseur d'accès internet qui ne soit pas grand public j'imagine.

    J'en ai parlé avec un ami qui fait du développement pour un serveur MMORPG en java sur internet (trop fort comme jeu). Si on pouvais utiliser le broadcast sur un MMORPG, la consomation en bande passante d'un serveur deviendrait minuscule car a chaque fois qu'un joueur fait une action on envoi le packet a tous les joueurs autour. hélas, c'est impossible. Pareil pour faire du streaming vidéo. Enfin si ça marcherait, 90% des applications l'utiliserai ce qui pour l'instant n'est pas le cas : il faut un design plus stupide et ré-envoyer les packets a chaque client.

  9. #9
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Bonjour et merci pour ta réponse.

    En fait, je n'essaye meme pas sur internet.

    J'essaye tout simplement en LAN, en LOCAL dans mon petit réseau à la maison.

    Le CLIENT 1 sur mon PC de bureau. (192.168.1.2 /24)
    Le CLIENT 2 sur mon PC PORTABLE. (192.168.1.3 /24)
    Le CLIENT 3 sur mon PC PORTABLE. (192.168.1.3 /24)
    Le Manager sur mon PC PORTABLE. (192.168.1.3 /24)

    Le client 1 ne voient pas les messages des clients 2 et 3.

    Les clients 2 et 3 et le manager voient leur messages.

    Le Manager ne voit pas les messages du client 1. Mais il voit les messages des clients 2 et 3.

    Mais le client 1 sait se connecter EN TCP au manager !

    Je pense que ca doit etre un problème avec la socket UDP ou bien avec l'adresse de Multicast employée.

    Mais ca devrait au moins fonctionner en réseau local, non ?

  10. #10
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Je pense avoir résolu le problème.

    J'ai utilisé l'adresse : 224.0.0.1 et cela semblerait fonctionner.

    Etrange tout de même ... Je vais continuer mes essais et je confirmerai ça une fois que j'aurai eu réponse satisfaisante à mon soucis !

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Par défaut
    serait-il possible que tu publies tes conclusions sur le forum, car ton problème est vraiment intéressant à creuser...si cela ne te dérange pas, bien sûr.

    Merci d'avance


  12. #12
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Et bien je ne sais pas ...

    C'est fou ce truc ! Complètement aléatoire !

    Il semblerait que l'adresse de Multicast à utiliser pour ce type d'application serait : 224.0.0.1

    MAIS (oui il y a un mais ), cela semble trop aléatoire ! Parfois ça marche impecc, parfois ça ne marche plus.
    Parfois ça marche dans un seul sens, et pas dans l'autre, (donc un PC recoit tous les messages de tout le monde, et l'autre PC ne recoit que les messages des clients qui sont connectés dessus).

    C'est vraiment très étrange. Je vais essayer de creuser un peu, mais personnelement, je pense avoir déja pas mal essayé de ce coté.

    Si quelqu'un a un explication / solution à ce problème, je suis preneur.

    Quant à moi, je vais faire évoluer le topic dès que j'aurai une réponse valable et sûre.

  13. #13
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Le range local est de 224.0.0.0 a 224.0.0.255...

  14. #14
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    yop,
    bah il te faut une une ip libre pour ton socket
    Ensuite UDP peut perdre pas mal de packets
    Et pour un chat c'est mieux d'utiliser TCP avec select dans une boucle
    bonne fin de journée

  15. #15
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut multicast
    Je pense que le multicast doit être autorisé/configure au niveau de ton routeur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Réseau] Créer une socket UDP multicast
    Par lilou77 dans le forum C++
    Réponses: 7
    Dernier message: 12/08/2010, 16h19
  2. socket udp multicast et l'api java.nio
    Par maarek dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 01/07/2008, 07h33
  3. Problème de socket en UDP
    Par alexorcet dans le forum Réseau
    Réponses: 17
    Dernier message: 27/05/2008, 17h43
  4. [Debutant] Problème Socket Linux UDP
    Par AxldenieD dans le forum Réseau
    Réponses: 3
    Dernier message: 01/11/2005, 17h08
  5. [Conception][Socket]Conception d'un "chat"
    Par Pill_S dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 12/09/2004, 01h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo