Я не могу использовать «UdpClient», который привязывает какой-либо локальный IPEndPoint для получения сообщения.
Как будто у меня есть четыре IP-адреса, но только один можно использовать для привязки для получения сообщения.
Почему другие не могут получать сообщения?
Описание:
Я получаю много IP-адресов, которые могут быть использованы
Код: Выделить всё
var validIps = NetworkInterface
.GetAllNetworkInterfaces()
.Where(nic => nic.OperationalStatus == OperationalStatus.Up)
.SelectMany(nic => nic.GetIPProperties().UnicastAddresses)
.Select(ua => ua.Address)
.Where(addr => addr.AddressFamily == AddressFamily.InterNetwork);
foreach (var item in validIps)
{
Console.WriteLine(item);
}
//192.168.3.244 WLAN
//192.168.153.1 VMware Network Adapter VMnet1
//192.168.25.1 VMware Network Adapter VMnet8
//127.0.0.1
Код
Код: Выделить всё
namespace UDP
{
internal class Program
{
static void Main(string[] args)
{
//绑定本地IP端点
//IPAddress ip_b = IPAddress.Parse("192.168.3.244");
//IPAddress ip_b = IPAddress.Parse("192.168.153.1");
IPAddress ip_b = IPAddress.Parse("192.168.25.1");
//IPAddress ip_b = IPAddress.Parse("127.0.0.1");
IPEndPoint iPEndPoint_B = new IPEndPoint(ip_b, 321);
UdpClient udpClientB = new UdpClient(iPEndPoint_B);
Byte[] sendBytes_multi = Encoding.ASCII.GetBytes("Gruop 224.0.1.0 say Hi");
IPAddress multiCastIP = IPAddress.Parse("224.0.2.0");
IPEndPoint multiCastIPEndPoint = new IPEndPoint(multiCastIP, 321);
udpClientB.JoinMulticastGroup(multiCastIP, ip_b);
Task.Run(() =>
{
var bytes = udpClientB.Receive(ref multiCastIPEndPoint);
string msg = Encoding.UTF8.GetString(bytes);
Console.WriteLine("B:" + msg);
Console.WriteLine(udpClientB.Client.LocalEndPoint);
});
UdpClient sendMultiUdp = new UdpClient();
sendMultiUdp.Connect(multiCastIPEndPoint);
sendMultiUdp.MulticastLoopback = true;
sendMultiUdp.Ttl = 5;
sendMultiUdp.Send(sendBytes_multi);
Console.ReadKey();
//result:
//B:Gruop 224.0.1.0 say Hi
//192.168.25.1:321
}
}
}
Если я не привязываю IP к получателю UdpClinet. Он будет использовать 0.0.0.0:321(LocalEndPoint).
Подробнее здесь: https://stackoverflow.com/questions/798 ... -multicast
Мобильная версия