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

Réseau .NET Discussion :

udpclient en localhost


Sujet :

Réseau .NET

  1. #1
    Membre du Club
    udpclient en localhost
    Bonjour tout le monde,
    J'ai un petit souci pour lire des données sur un port udp en localhost.
    j'ai un programme sur un PC qui envoit des données en localhost sur le port 1853.
    Mon programme doit recevoir ces données sur ce même PC et les traiter.
    Hors dans la boucle while le programme reste bloqué sur la commande "Receive".
    Ci dessous le programme de test que j'utilise pour comprendre pourquoi ça ne fonctionne pas:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    IPEndPoint ip = null;
    ip = new IPEndPoint(IPAddress.Any, 1853);
    client = new UdpClient(ip);
    client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    client.Client.Bind(ip);
     
    while (!stopping)
    {
        IPEndPoint ip = null;
        byte[] recData = client.Receive(ref ip);
        Thread.Sleep(10);
    }


    J'ai testé différente configuration de IPEndPoint avec une adresse null, avec une adresse en "Any", ... je n'arrive pas à recevoir de donné!
    est ce que quelqu'un à déjà eu ce genre de problème?
    d'avance merci.

  2. #2
    Membre éclairé
    Salut!

    A mon avis, le problème vient de ta boucle et plus précisément de la ligne suivante:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    IPEndPoint ip = null;

    Ce ne serait pas plus logique de définir ip avant la réception?
    Du genre:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IPEndPoint ip = new IPEndPoint(IPAddress.Any,1853);
    byte[] recData = client.Receive(ref ip);
    if (recData.Length > 0)
         //...

  3. #3
    Membre du Club
    Salut Framebreak,
    Merci pour ta réponse.
    Effectivement cela ne pouvait pas marché comme le code que j'avais écrit plus haut, mais j'ai essayé plusieurs ipendpoint : any, 127.1.1.1, any,... mais cela ne fonctionne tjs pas!
    ci dessous le code qui me semble le plus logique:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    IPEndPoint ip = new IPEndPoint(IPAddress.Any, 1853);
                client = new UdpClient(ip);
                client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
     
     while (!stopping)
     {
           IPEndPoint ip = new IPEndPoint(IPAddress.Any, 1853);
           byte[] recData = client.Receive(ref ip);
           Thread.Sleep(10);
    }

    Des idées?

  4. #4
    Membre éclairé
    Ton problème ne vient pas de l'adresse IP puisque IPAddress.Any indique que le client doit écouté sur toutes les interfaces réseaux.
    A mon avis tu confond serveur et client.
    Je pense que le code suivant devrait permettre la réception:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UdpClient client = new UdpClient(1853);
      while (!stopping)
     {
           IPEndPoint ip = new IPEndPoint(IPAddress.Any, 1853);
           byte[] recData = client.Receive(ref ip);
           if (recData.Length > 0)
                      stopping = true;
           else
                      Thread.Sleep(10);
    }

  5. #5
    Membre du Club
    Merci j'ai résolu mon problème