2

我正在使用一个UdpClient从多播组中读取数据。

它是这样配置的:

m_udpClientReceiver = new UdpClient();
m_receivingEndPoint = new IPEndPoint(IPAddress.Any, m_port);
m_udpClientReceiver.ExclusiveAddressUse = false;
m_udpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
m_udpClientReceiver.ExclusiveAddressUse = false;
m_udpClientReceiver.Client.Bind(m_receivingEndPoint);
m_udpClientReceiver.JoinMulticastGroup(m_multicastAddress, 255);

我读了它:

Byte[] data = m_udpClientReceiver.Receive(ref m_receivingEndPoint);

我有几个网卡(两个 LAN,一个 wifi),绑定在不同的子网上。我需要知道在哪个网卡(实际上是哪个 ip)上收到了请求。

我怎样才能做到这一点?

谢谢!

4

2 回答 2

0

作为替代方案,您是否考虑过不加入多播组?您可以使用标准的 UDPClient 类轻松地发送和接收多播数据包。IE

UdpClient.Send(byte[] dgram, int bytes, IPEndPoint endPoint)

哪里endPoint = new IPEndPoint(IPAddress.Broadcast, <port number>)。并且在接收时仍在使用:

Byte[] data = m_udpClientReceiver.Receive(ref m_receivingEndPoint);

m_receivingEndPoint 现在在哪里正确设置?我刚刚对此进行了测试,并且效果很好。

于 2013-03-04T15:53:13.173 回答
0

我终于使用BeginReceive方法(异步),并且我将其绑定的 ip 作为上下文提供

于 2013-03-08T14:21:34.567 回答