2012-11-13 79 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