具有多个 NIC 的计算机上的 UDPClient 多播接收失败
Posted
技术标签:
【中文标题】具有多个 NIC 的计算机上的 UDPClient 多播接收失败【英文标题】:UDPClient Multicast receive fails on computer with multiple NICs 【发布时间】:2011-03-12 01:42:33 【问题描述】:我有一台带有多个 NIC 的计算机 - UDPClient 的发送方法不断失败。代码如下:
private static void receiveData()
recvSock = new UdpClient(PORT);
//recvSock.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, mainInterface);
recvSock.JoinMulticastGroup(IPAddress.Parse(IP), 50);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
while (true)
byte[] data = recvSock.Receive(ref iep);
// Do not include messages from us
if (myIPs.Contains(iep.Address))
continue;
string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
Console.WriteLine("received: " + stringData);
PORT = 5000 和 IP = 224.5.6.7 所以应该没问题。主要问题是我无法通过 recvSock.Receive() 行。我看到数据包通过wireshark进来——但代码不会处理它们......
想法?提前致谢!
丹
编辑:我可以确认是多个 NIC 导致了问题 --- 代码在单个 NIC 上运行良好。取消注释 SetSocketOption 行应该允许它与多个 NIC 一起使用,但它仍然失败....想法?
【问题讨论】:
明确地说,这个“客户端”应用程序 [机器] 有多个 NIC,或者您连接的服务器有多个 NIC?? 由于我有同样的问题,我愿意确认:“客户端应用程序[机器]有多个网卡”。通常,客户端关心位于多个 NIC 网络中的任何一个上的服务器。仅当客户端可以通过多个客户端 NIC 看到相同服务器时,具有多个 NIC 的服务器才重要。 @Dan 你找到解决方法了吗?我也有同样的问题 【参考方案1】:我有同样的问题找到了这篇文章,然后在以下位置找到了解决方案: UDP: Read data from all network interfaces
基本上 Bind() 到 0.0.0.0 不起作用,您必须对每个本地 IP 地址进行 Bind() 和 JoinMulticastGroup()。一定要为这个爱微软。
【讨论】:
【参考方案2】:接口部分是以下代码中的重要部分:
unsigned long interface;
ip_mreq mreq;
_parseHostname( _description->getInterface(), interface );
mreq.imr_multiaddr.s_addr = _writeAddress.sin_addr.s_addr;
mreq.imr_interface.s_addr = interface;
setsockopt( _readFD, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char*)&mreq, sizeof( mreq ));
接口为接收网卡的(单播)IP地址。
【讨论】:
这个答案可能有用。但由于它使用的术语来自与原始问题完全不同的套接字包,...,谁能说出来? 此答案与给定问题的唯一相关性是它们都包含“IP”一词。以上是关于具有多个 NIC 的计算机上的 UDPClient 多播接收失败的主要内容,如果未能解决你的问题,请参考以下文章
C#:UdpClient 很快调用 close() 时不发送数据
您如何“取消” UdpClient::BeginReceive?