![](/img/trans.png)
[英]C# console app won't send UDP multicast packet on Windows Server 2003
[英]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());
我刚刚解决了。 看起来UDP组播数据包的默认TTL值是“ 1”。 ! 我通过使用以下代码将其更改为“ 16”:
_udpClient.Client.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.MuticastTimeToLive,16);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.