При исследовании 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
? Что этот флаг на самом деле делает / контролирует?