3

我只是在玩一个UdpClient并注意到设置UdpClient.EnableBroadcasttrue没有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();
    }
}

MSDN页面对此相当含糊,但如果您将属性设置为广播,听起来应该会导致异常false

获取或设置一个布尔值,该值指定 UdpClient 是否可以发送或接收广播数据包。... 如果 UdpClient 允许广播数据包,则为 true;否则为假。默认值为假。

这不是一个关键问题,但它只是让我想知道。这是一个错误还是该属性就在那里,以便您稍后可以参考它并确定您是否打算使用它进行广播?

4

1 回答 1

0

您需要在初始化 udp 套接字时启用广播模式,如下所示

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);

谢谢你的动力。

于 2012-11-13T13:48:39.283 回答