繁体   English   中英

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

[英]C# UdpClient Can't Send Multicast UDP Packet

我有一台笔记本电脑,笔记本电脑的无线适配器的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));

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

根据您的描述,问题在于发送者正在发送其系统默认多播接口,该接口恰好是不在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选项枚举

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM