我尝试在Windows 10中将UDP数据报发送到启用IPv6的接口(IPv6地址FF02::1
,IPv6 Multicast Address Space Registry)的多播组“所有节点”,但是无法在本地接收。
示例C#
代码:
var a1 = new IPEndPoint(IPAddress.Parse("FF02::1%25"), 3366);
var a2 = new IPEndPoint(IPAddress.Parse("::1"), 3366);
var a3 = new IPEndPoint(IPAddress.Parse("fe80::xxxx:xxxx:xxxx:xxxx%25"), 3366);
var u1 = new UdpClient(new IPEndPoint(IPAddress.IPv6Any, 3366));
var u2 = new UdpClient(new IPEndPoint(IPAddress.IPv6Any, 4466));
void rcv(IAsyncResult ar)
{
IPEndPoint iipe = null;
var b = u1.EndReceive(ar, ref iipe);
u1.BeginReceive(rcv, null);
Console.WriteLine($"{Encoding.UTF8.GetString(b)} from {iipe}");
}
u1.BeginReceive(rcv, null);
u2.Send(Encoding.UTF8.GetBytes("Test1"), 5, a1);
u2.Send(Encoding.UTF8.GetBytes("Test2"), 5, a2);
u2.Send(Encoding.UTF8.GetBytes("Test3"), 5, a3);
其中fe80::xxxx:xxxx:xxxx:xxxx%25
是接口链接本地作用域地址,%25
接口索引。
我希望发送到地址a1,a2,a3的所有3个数据包都将被接收。
a1
-发送到也包括本地主机的多播组
a2
-完全发送到本地主机
a3
-发送到接口地址
但是,此代码显示如下:
Test2 from [::1]:4466
Test3 from [fe80::xxxx:xxxx:xxxx:xxxx%25]:4466
已成功接收到发送到地址a2和a3(本地主机和接口地址)的数据报。 数据报,发送给所有丢失的节点。
我在做什么错了?