C#UdpClient无法发送多播UDP数据包

时间:2019-09-16 08:34:57

标签: c# multicast udpclient

我有一台笔记本电脑,该笔记本电脑的无线适配器的IP地址为“ 192.168.5.60”。这台笔记本电脑将发送UDP组播数据包。

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

问题是,如果我使用从笔记本电脑上互联网安装的其他软件,并将多播udp数据包发送到“ 239.194.190.22:4000”,我可以在台式机上接收这些数据包。

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

我的代码:

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));

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

2 个答案:

答案 0 :(得分:1)

根据您的描述,问题在于发送方正在发送其系统默认多播接口,该接口恰好是不在与192.168.5 / 24网络链接的接口上。如果您将IP_MULTICAST_IF与发件人的ip或接口索引一起使用(如ipconfig所示),而不是IP_MULTICAST_TTL,则TTL为1就可以了,因为您随后将使用共享链接,即:

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

(您可能需要在地址上做更多工作以使其成为网络顺序的DWORD,并且基于ip optionsenums

答案 1 :(得分:0)

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

_udpClient.Client.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.MuticastTimeToLive,16);