我正在使用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?
但我不需要专门使用地址,如果我在构造函数中给出它,我得到一个异常(说这已经绑定了)。
我要使用相同的端口,因为协议定义了响应不应该被多播。
答案 0 :(得分:1)
您已完成所有操作,但听起来该端口的其他用户已拥有独占端口访问权限。 WinSock不允许您从此端口发送。
答案 1 :(得分:0)
事实上,根据documentation:
必须在将基础套接字绑定到客户端端口之前设置此属性。如果调用UdpClient.UdpClient(Int32),UdpClient.UdpClient(Int32,AddressFamily),UdpClient.UdpClient(IPEndPoint)或UdpClient.UdpClient(String,Int32),则客户端端口被绑定为构造函数的副作用,并且您随后无法设置ExclusiveAddressUse属性
因此,在设置源端口时,不可能将ExclusiveAddressUse设置为false。我直接使用了Socket