UdpClient:发送数据时指定源端口

时间:2013-02-19 06:55:26

标签: c# .net udpclient

我正在使用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?

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

我要使用相同的端口,因为协议定义了响应不应该被多播。

2 个答案:

答案 0 :(得分:1)

您已完成所有操作,但听起来该端口的其他用户已拥有独占端口访问权限。 WinSock不允许您从此端口发送。

答案 1 :(得分:0)

事实上,根据documentation

  

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

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