【发布时间】:2013-02-19 06:55:26
【问题描述】:
我正在使用UdpClient 在多播地址上发送数据。
代码如下所示:
m_udpclientSender = new UdpClient();
m_remoteEndPoint = new IPEndPoint(m_multicastAddress, m_port);
m_udpclientSender.ExclusiveAddressUse = false;
m_udpclientSender.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
m_udpclientSender.JoinMulticastGroup(m_multicastAddress, 255);
m_udpclientSender.ExclusiveAddressUse = false;
m_udpclientSender.Send(buffer, buffer.Length, m_remoteEndPoint);
它被发送到正确的端口/IP,但它是从一个随机端口发出的(这是预期的),但我需要/希望它从一个特定的端口发送(与我发送的端口相同) .
我看到了:How to specify source port of a UdpPacket?
但我不需要专门使用地址,如果我在构造函数中给出这个,我会得到一个异常(说这已经被绑定了)。
我必须放置相同的端口,因为协议定义不应多播响应。
【问题讨论】:
-
你的 udpclient 对应的已经在指定的端口上监听了,对吧?所以它知道它必须回答哪个端口(它正在侦听的端口相同)。那么为什么要指定源端口呢?
-
mDNS 协议定义如果发送方端口不是 5353(mDNS 端口),则为单播查询。这意味着我不会在我正在收听的多播组中收到它(并且其他人也不会收到这个答案)。
-
我同意 David Pfeffer 的观点,但在您的代码中,ExclusiveAddressUse 属性仍然存在问题。看看这个:link。可能你直接使用socket类会更好。