我只是在玩 UdpClient
并注意到将 UdpClient.EnableBroadcast
设置为 true
或 false
不会没有任何(副作用)效果,我可以用任何一种方式进行广播:
using (UdpClient client = new UdpClient())
{
byte[] data = Encoding.ASCII.GetBytes("Hello");
while (true)
{
client.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, 45678));
Console.WriteLine("sent");
Console.ReadKey();
}
}
The MSDN page 对此相当含糊,但听起来如果您将属性设置为 false
进行广播应该会引发异常:
Gets or sets a Boolean value that specifies whether the UdpClient may send or receive broadcast packets. ... true if the UdpClient allows broadcast packets; otherwise, false. The default is false.
这不是一个关键问题,但它只是让我想知道。这是一个错误还是该属性就在那里以便您稍后可以引用它并确定您是否打算使用它进行广播?
最佳答案
初始化udp socket时需要开启广播模式,如下图
this.someUdpSocket.EnableBroadcast = true;
this.someUdpSocket.Client.Bind(new IPEndPoint(IPAddress.Any, 0));
新编辑:
上面的代码不起作用,下面的代码
this.someUdpSocket.Client.EnableBroadcast = false;
也达不到目的。因此,对于您的回答“是的,它可以称为错误,或者该属性可能与其他某些上下文相关。”
但是如果你想明确地禁用广播,你可以像下面那样做:
this.someUdpSocket.Client.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.Broadcast, false);
谢谢你的鼓励。
关于c# - UdpClient.EnableBroadcast 值无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13361779/