1

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,但它是从一个随机端口发出的(这是预期的),但我需要/希望它是从一个特定的端口(我也发送的同一个端口)发送的。

我看到了:如何指定 UdpPacket 的源端口?

但是我不需要专门使用地址,如果我在构造函数中给出这个,我会得到一个异常(说这已经被绑定了)。

我必须放置相同的端口,因为协议定义不应多播响应。

4

2 回答 2

1

您所做的一切都是正确的,但听起来该端口的其他用户已经拥有独占端口访问权限。WinSock 不会让你从这个端口发送。

于 2013-02-19T12:50:39.333 回答
0

事实上,根据文档

必须在底层套接字绑定到客户端端口之前设置此属性。如果调用 UdpClient.UdpClient(Int32)、UdpClient.UdpClient(Int32, AddressFamily)、UdpClient.UdpClient(IPEndPoint) 或 UdpClient.UdpClient(String, Int32),则客户端端口绑定为构造函数的副作用,并且您不能随后设置 ExclusiveAddressUse 属性

所以在设置源端口时不可能将 ExclusiveAddressUse 设置为 false。我直接使用了Socket

于 2013-02-19T14:08:59.697 回答