Puertos de multidifusión udp en código .net

solo funciona cuando uso el mismo puerto (9050 o algún otro) tanto en envío como en recepción, entonces, ¿cómo puedo recibir la multidifusión en más de un cliente al mismo tiempo en la misma computadora? eso crea un error de socket de usar el mismo puerto más de una vez si uso el mismo puerto en más de un cliente

http://codeidol.com/csharp/csharp-network/IP-Multicasting/Csharp-IP-Multicast-Support/

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    class UdpClientMultiSend
    {
      public static void Main()
      {
       UdpClient sock = new UdpClient();
       IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);
       byte[] data = Encoding.ASCII.GetBytes("This is a test message");
       sock.Send(data, data.Length, iep);
       sock.Close();
      }
    }




using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class UdpClientMultiRecv
{
  public static void Main()
  {
   UdpClient sock = new UdpClient(9050);
   Console.WriteLine("Ready to receive…");
   sock.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);
   IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
   byte[] data = sock.Receive(ref iep);
   string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
   Console.WriteLine("received: {0} from: {1}", stringData, iep.ToString());
   sock.Close();
  }
}

preguntado el 10 de marzo de 12 a las 09:03

2 Respuestas

Vea la respuesta a esta publicación: Conexión de dos clientes UDP a un puerto (enviar y recibir)

Tienes que configurar la opción de socket antes de enlazar.

static void Main(string[] args)
{
    IPEndPoint localpt = new IPEndPoint(IPAddress.Any, 6000);

    UdpClient udpServer = new UdpClient();
    udpServer.Client.SetSocketOption(
        SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    udpServer.Client.Bind(localpt);

    UdpClient udpServer2 = new UdpClient();
    udpServer2.Client.SetSocketOption(
        SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

    udpServer2.Client.Bind(localpt); // <<---------- No Exception here

    Console.WriteLine("Finished.");
    Console.ReadLine();
}

contestado el 23 de mayo de 17 a las 13:05

Esto funciona incluso sin JoinMulticastGroup, ¡gracias! - ola

Establezca la propiedad ExclusiveAddressUse en false en la clase udpClient.

Consulte las documentación para obtener una descripción completa de cómo se usa.

respondido 10 mar '12, 10:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.