c# - UdpClient.EnableBroadcast 值无效

标签 c# .net udp udpclient

我只是在玩 UdpClient 并注意到将 UdpClient.EnableBroadcast 设置为 truefalse 不会没有任何(副作用)效果,我可以用任何一种方式进行广播:

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/

相关文章:

c# - C# 中的 Mysql --> 查找名称所在的 ID

c# - 访问被拒绝。 (来自 HRESULT : 0x80070005 (E_ACCESSDENIED) 的异常

c# - 存储库中的错误处理 (API REST)

c# - 哪些策略和工具可用于查找 .NET 中的内存泄漏?

c# - 什么是 C# 命名参数的 F# 等价物?

.net - String 和 Stream 的 .NET MD5 Hash 之间的区别

.NET LINQ IQueryable : what is `Expression` for?

java - 将接收数据包与字符串 UDP 协议(protocol)进行比较

python - UDP 服务器在客户端之间转发消息

python - 如何发现不同子网上的硬件?