многоадресные порты udp в .net код - PullRequest
2 голосов
/ 10 марта 2012

работает только тогда, когда я использую один и тот же порт (9050 или какой-то другой) для отправки и получения, тогда как я могу одновременно получать многоадресную рассылку более чем в одном клиенте на одном компьютере? это создает ошибку сокета при использовании одного и того же порта более одного раза, если я использую один и тот же порт в более чем одном клиенте

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();
  }
}

Ответы [ 2 ]

3 голосов
/ 27 марта 2013

См. Ответ на этот пост: Подключение двух клиентов UDP к одному порту (отправка и получение)

Необходимо установить параметр сокета перед привязкой.

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();
}
0 голосов
/ 10 марта 2012

Установите для свойства ExclusiveAddressUse значение false в классе udpClient.

См. документацию для полного описания того, как вы ее используете.

...