C#UdpClient Can';发送多播UDP数据包

C#UdpClient Can';发送多播UDP数据包,c#,multicast,udpclient,C#,Multicast,Udpclient,我有一台笔记本电脑,它有一个ip地址为“192.168.5.60”的无线适配器。此笔记本电脑将发送UDP多播数据包 我有一台台式电脑,它有一个网络适配器ip“192.168.5.90”。我在这台台式电脑上安装了一个名为“Multicast Tester”的软件,它加入了多播组(“239.194.190.22:4000”) 问题是,若我使用另一个我在笔记本电脑上从internet安装的软件,并将多播udp数据包发送到“239.194.190.22:4000”,我可以在台式pc上接收这些数据包 如果

我有一台笔记本电脑,它有一个ip地址为“192.168.5.60”的无线适配器。此笔记本电脑将发送UDP多播数据包

我有一台台式电脑,它有一个网络适配器ip“192.168.5.90”。我在这台台式电脑上安装了一个名为“Multicast Tester”的软件,它加入了多播组(“239.194.190.22:4000”)

问题是,若我使用另一个我在笔记本电脑上从internet安装的软件,并将多播udp数据包发送到“239.194.190.22:4000”,我可以在台式pc上接收这些数据包

如果我使用我的程序发送这些数据包,我将无法接收多播数据包

我的代码:

UdpClient udpClient = new UdpClient();
udpClient.client.bind(new IPEndPoint(IPAddress.Parse("192.168.5.60"), 0));
udpClient.JoinMulticastGroup(IPAddress.Parse("239.194.190.22"));
udpClient.send(myData, myData.length, new IPEndPoint(IPAddress.Parse("239.194.190.22"), 4000));

注意:两台计算机都有多个NIC。

我刚刚解决了这个问题。看起来UDP多播数据包的默认TTL值是“1”! 我使用以下代码将其更改为“16”:


_udpClient.Client.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.multicastTimeToLive,16)根据您的描述,问题是您的发件人正在发送其系统默认的多播接口,而该接口恰好不在与192.168.5/24网络的链接上。如果您将
IP\u multicast\u If
与发件人的IP或接口的索引一起使用(如
ipconfig
所示)而不是
IP\u MULTICAST\u TTL
,那么TTL为1就可以了,因为您正在使用共享链接,即:

_udpClient.Client.SetSocketOption(SocketOptionLevel.IP,
  SocketOptionName.MulticastInterface, IPAddress.Parse("192.168.5.60").GetAddressBytes());

(您可能需要对地址进行更多操作,使其成为网络顺序中的DWORD,并基于and)

大多数路由器在未设置允许多播通过的属性的情况下不会转发多播。因此,我需要了解您的网络体系结构才能提供帮助。@jdweng但是,其他软件可以发送它。我不涉及路由器配置。您所做的是危险的。您不希望在本地子网和外部进行多播广播这就是为什么将其设置为1。Muliticast用于单个子网。现在网络中可能有路由器/集线器,可能需要将其设置为2,但16有问题。如果2不起作用,则需要调查问题的根本原因。