Почему мне не нужно устанавливать для ExclusiveAddressUse значение false для многоадресной рассылки UDP? - PullRequest
0 голосов
/ 12 февраля 2020

При исследовании UDP и многоадресной рассылки я получил следующий код:

var client = new UdpClient();

// client.ExclusiveAddressUse = false; works without setting this flag

client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);  

// client.ExclusiveAddressUse = false; works without setting this flag  

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8080);
client.Client.Bind(localEndPoint);
IPAddress multicastAddress = IPAddress.Parse("239.0.0.222");
client.JoinMulticastGroup(multicastAddress);

while (true)
{
    byte[] receivedBytes = client.Receive(ref localEndPoint); // sits here until it receives something
    string message = Encoding.ASCII.GetString(receivedBytes);
    Console.WriteLine($"Message received: {message}");
}

Две закомментированные строки - это строки кода, которые, как я предполагал, мне понадобятся, но я могу используйте этот код, чтобы запустить и иметь несколько «слушателей» UDP, которые все правильно получают сообщение, которое я отправляю. Основываясь на microsoft docs , я бы предположил, что он мне понадобится, поскольку он, по-видимому, «позволяет только одному клиенту использовать указанный c порт» при значении true. Код для отправки сообщений: следующим образом:

Console.WriteLine("Enter message to send: ");
string message = Console.ReadLine();

var client = new UdpClient();
IPAddress multicastAddress = IPAddress.Parse("239.0.0.222");
client.JoinMulticastGroup(multicastAddress);
IPEndPoint remoteEndPoint = new IPEndPoint(multicastAddress, 8080);
byte[] messageToSend = Encoding.ASCII.GetBytes(message);
client.Send(messageToSend, messageToSend.Length, remoteEndPoint);

Console.WriteLine("Message sent.");

Почему мне не нужно client.ExclusiveAddressUse = false? Что этот флаг на самом деле делает / контролирует?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...