2012-11-13 105 views
1

我只是在玩弄一个UdpClient,发现设置UdpClient.EnableBroadcasttruefalse没有任何(侧)的效果,我可以用它来播放两种方式:UdpClient.EnableBroadcast值无效

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

获取或设置一个布尔值,指定日e UdpClient可能会发送或接收广播数据包。 ... 如果UdpClient允许广播包,则为true;否则,是错误的。默认值是false。

不是一个关键的问题,但它只是让我想知道。这是一个错误,还是只是在那里的财产,所以你可以在以后参考它,并确定你是否打算用它播放?

+0

我注意到相同的行为,并想知道同样的事情。目前还不清楚这个属性是为什么而设计的,但实际上我们可以明显地发送广播数据包,而不管设置如何。 –

回答

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

谢谢你的动机。

+0

这是无关紧要的。关键是我能够广播,而“广播模式”是_“禁用”_。 –

+0

选中“新建编辑”之前,请将其缩短并与问题无关。 – Jsinh