2009-04-14 80 views
8

在C#中,我使用了UdpClient.Receive功能:UdpClient的廣播地址接收

public void StartUdpListener(Object state) 
    { 
     try 
     { 
      udpServer = new UdpClient(new IPEndPoint(IPAddress.Broadcast, 1234)); 
     } 
     catch (SocketException ex) 
     { 
      MessageBox.Show(ex.ErrorCode.ToString()); 
     } 

     IPEndPoint remoteEndPoint = null; 
     receivedNotification=udpServer.Receive(ref remoteEndPoint); 
     ... 

但是我得到一個插座例外稱該地址不可用,錯誤代碼10049 我該怎麼辦,以否定這個例外?

回答

16

這裏是我目前使用的生產應用程序,一些工作代碼JIST(我們已經有了一些額外的在那裏處理,其中客戶端的服務器應用程序都在一個獨立安裝運行的情況下)。接收udp通知的工作是接收消息已準備好處理。正如亞當·亞歷山大所提到的,你唯一的問題是你需要使用IPAddress.Any,而不是IPAddress.Broadcast。當您想要發送廣播UDP數據包時,您只會使用IPAddress.Broadcast。

設置UDP客戶端

this.broadcastAddress = new IPEndPoint(IPAddress.Any, 1234); 
this.udpClient = new UdpClient(); 
this.udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
this.udpClient.ExclusiveAddressUse = false; // only if you want to send/receive on same machine. 

並觸發一個異步的開始接收使用回調。

this.udpClient.Client.Bind(this.broadcastAddress); 
this.udpClient.BeginReceive(new AsyncCallback(this.ReceiveCallback), null); 

希望這會有所幫助,您應該能夠適應它同步工作,沒有太多問題。非常類似於你在做什麼。如果在此之後你仍然收到錯誤,那麼其他的東西必須使用你試圖收聽的端口。

所以,澄清。

IPAddress.Any =用於接收。我想聽一個到達任何IP地址的數據包。 IPAddress.Broadcast =用於發送。我想發送一個數據包給正在收聽的任何人。

+0

你好,在我的情況下,我在同一臺機器上廣播時出現錯誤。你有沒有這個錯誤,何解決這個問題 – Smith 2011-08-18 00:23:49

4

你的目的,我相信你會想用IPAddress.Any而不是IPAddress.Broadcast。希望這可以幫助!

0

即錯誤意味着協議斜面結合到所選擇的IP /端口組合。

我還沒有在年齡段使用的UDP廣播,但我不記得你需要使用不同的IP範圍。

0

沒有什麼錯,你已經配置了UdpClient的方式。你有沒有嘗試過不同的端口號?也許1234已經在您的系統上由另一個應用程序使用。