Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre émérite
    Inscrit en
    juillet 2008
    Messages
    1 194
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 1 194
    Points : 981
    Points
    981

    Par défaut UDP Braodcast sur internet

    bonjour

    j'aimerais faire un broadcast UDP sur l'internet
    je travail en c#
    quand je lance mes deux appli sur ma machine cela marche
    mais quand je les lance sur des machines sur le net ca ne fonctionne pas du tout

    (si je me suis trompé de forum et que vous savez ou je dois mettre ce message prevenez moi merci)

    voici les codes

    code de l'envoi
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    UdpClient udpClient = new UdpClient();
                    // broadcasts identification request message to the network
                    Byte[] sendBytes = Encoding.ASCII.GetBytes("USER=" + USER + "*********");
     
                    // set address to broadcast address and port to PORT
                    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 1818);
                    //IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Broadcast, 1818);
     
                    // broadcast data
                    udpClient.Send(sendBytes, sendBytes.Length, RemoteIpEndPoint);
    code pour la reception

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
      udpClient = new UdpClient();
                IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 1818);
                udpClient.Client.Bind(RemoteIpEndPoint);
     
                        Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
                        string returnData = String.Empty;
                        returnData = Encoding.ASCII.GetString(receiveBytes);
    merci si vous avez une idée
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    décembre 2006
    Messages
    1 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 622
    Points : 1 748
    Points
    1 748

    Par défaut

    Salut,

    Le problème ne vient pas de ton appli, mais c'est une limitation de la façon dont internet fonctionne: le broadcast n'est pas routé sur le net, seul l'unicast l'est.

    Donc aucune chance qu'un paquet broadcast dépasse les limites de ton réseau local.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  3. #3
    Membre émérite
    Inscrit en
    juillet 2008
    Messages
    1 194
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 1 194
    Points : 981
    Points
    981

    Par défaut

    et tu pourrais pas me dire ou je pourrais trouver du code sur unicast ?
    si possible en c#
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!

  4. #4
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    décembre 2006
    Messages
    1 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 622
    Points : 1 748
    Points
    1 748

    Par défaut

    Unicast, ça veut juste dire "un vers un". C'est le principe de tout paquet envoyé sur le net, quel que soit le protocole (TCP, UDP, ...). Dit autrement, quand tu fais une 'bête' connexion TCP ou UDP 'classique', c'est déjà de l'unicast, (ou du "point à point" si tu préfères).

    Sur le net, le seul moyen d'envoyer un même contenu à x destinataires sur le net est d'envoyer x fois le contenu, une fois pour chaque destinataire.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  5. #5
    Membre émérite
    Inscrit en
    juillet 2008
    Messages
    1 194
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 1 194
    Points : 981
    Points
    981

    Par défaut

    oui mais si j'ai bien compris c'est que ça suppose que tu doivent connaitre l'adresse de qui tu veux envoyer
    c'est la tout mon problème

    mon listener est sur une adresse pas fixe
    donc les serveur ne peuvent pas savoir a qui envoyer ....

    le principe que je voudrait mettre en place est le suivant :
    -plusieurs serveurs se signalent a mon listerner, ils communiquent leurs adresses
    -le listerner se connecte a eux en établissant une connections TCP pour échanger des informations

    si tu as une idee pour mettre en place ce principe ca m'arrangerait

    si tu savais ou trouver du code c# aussi

    merci
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!

  6. #6
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    décembre 2006
    Messages
    1 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 622
    Points : 1 748
    Points
    1 748

    Par défaut

    Il faut que tu regardes du côté de la notion d'annuaire. Quand tu veux contacter quelqu'un par téléphone et que tu ne connais pas son numéro, tu ne vas pas appeler les 60 millions de numéro en France pour espérer trouver celle qui t'intéresse ; tu vas plutôt consulter un annuaire qui te donnera le bon numéro.

    Concrètement dans ton cas, ceux qui veulent pouvoir être contactés vont s'enregistrer (ie. leur adresse IP) dans ton annuaire qui est situé à un endroit fixe (une simple page web chez un hébergeur gratuit peut suffire). Ces même acteurs auront pour tâche de mettre à jour leur informations (leur IP) à chaque fois qu'elles changent.

    Quand ton autre programme voudra les contacter, il va d'abord consulter l'annuaire pour récupérer l'ensemble des adresses IP (ou celles qui l'intéressent) et il pourra ensuite contacter directement les interlocuteurs qu'il veut.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  7. #7
    Membre émérite
    Inscrit en
    juillet 2008
    Messages
    1 194
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 1 194
    Points : 981
    Points
    981

    Par défaut

    bon j'ai résolu une parti de mon problème pour faire un unicast
    j'ai pris un domaine toto.com par exemple qui enregistre l'adresse de ma box sur le net
    j'ai fait un reroutage NAT sur ma box pour le port en UDP

    et je fais un unicast de mon client vers mon serveur
    avec l'adresse resolu de toto.com
    ca ca fonctionne bien

    maintenant ce que j'aurais aimé faire c'est lorsque mon serveur reçois la requête UDP
    il puisse établir une connections TCP avec le client
    évidement le client a un listenerTCP en route

    le problème c'est que lorsque je fais tourner
    les deux app sur la même machine
    j'ai l'erreur
    "Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée"
    bizarrement le serveur reçoit l'adresse passerelle (interne pas celle du net)

    les deux app sur des ordinateurs sur le net
    j'ai l'erreur
    "L'adresse demandée n'est pas valide dans son contexte"
    bizarrement le serveur reçoit l'adresse de la passerelle (mais celle du net)
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!

  8. #8
    Membre régulier
    Homme Profil pro
    Architecte serveur
    Inscrit en
    septembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte serveur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2011
    Messages : 58
    Points : 76
    Points
    76

    Par défaut

    Didiou, tu fais tout à l'envers ! (si je peux me permettre)
    Tu es en train de faire en sorte que le serveur se connecte au client, ie. tu inverses la logique client serveur.
    Déjà, tu vas te faire jeter par le moindre firewall/NAT, parce que tu tentes une connexion qui est assimilée à une tentative de hacking par majorité des équipements réseau.
    Il faut que ce soient tes clients qui créent la connexion directement en TCP. Ou éventuellement, qu'ils créent la connexion UDP, puis la connexion TCP (je sais pas pourquoi tu as besoin de passer par l'UDP avant le TCP).

    Honnêtement, pour moi, y a un moment où tu as une erreur de logique dans ton design qui t'amène à faire ce choix qui me paraît hasardeux. A part les cas de NAT punchthrough, j'ai du mal à imaginer une situation où tu as besoin de faire ça.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •