2012-04-17 53 views
0

我已經使用此代碼示例http://msdn.microsoft.com/en-us/library/tst0kwb1.aspx來製作能夠接收和發送消息的控制檯UDP服務器。WinForms中的UDPclient?

但我不希望這是一個控制檯應用程序,我想使用窗體。我已經在我的應用程序中成功實現了發送消息功能,但是我不知道如何讓偵聽器工作。

這裏是接收消息的代碼,它什麼也不做。
注意:我將此代碼放在按鈕單擊事件代碼的下方。

private void StartListener() 
    { 
     bool done = false; 
     UdpClient listener = new UdpClient(listenPort); 
     IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); 

     try 
     { 
      while (!done) 
      { 
       this.lblMessage.Text = "Waiting for broadcast"; 
       byte[] bytes = listener.Receive(ref groupEP); 

       this.lblRecieve.Text = Encoding.ASCII.GetString(bytes, 0, bytes.Length); 
      } 

     } 
     catch (Exception e) 
     { 
      this.lblMessage.Text = e.ToString(); 
     } 
     finally 
     { 
      listener.Close(); 
     } 
    } 

這段代碼顯然是錯誤的,但我從來沒有做過在C#中任何事情之前,該控制檯的示例代碼是我能找到的UDP服務器的唯一指南。

下面是發送消息的代碼,它完美的工作。

private void btnSend_Click(object sender, EventArgs e) 
    { 
     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     IPAddress broadcast = IPAddress.Parse("192.168.0.105"); 
     byte[] sendbuf = Encoding.ASCII.GetBytes("test"); 
     IPEndPoint ep = new IPEndPoint(broadcast, listenPort); 
     s.SendTo(sendbuf, ep); 
     this.lblMessage.Text = "Sent Message"; 
    } 

編輯:

我感謝我從你得到了幫助,但不是調整我自己的斷碼的工作,我發現了另一個代碼來調整,這樣它的工作原理是我想要的。

UDP datagram code for server client application in C#

這是我借的代碼和它完美的作品,除了停止()不能正常工作,但它不是一個大問題,不應該是很難與谷歌修復。

我還是從你們給我的鏈接中學到了很多東西。

回答

0

你將不得不註冊一個監聽器。只要檢查下面的文章。

Events Tutorial

+0

感謝您的回答,請看本教程。 – Adam 2012-04-17 06:34:23

3

它可能工作,你就不能看到它。你用無限循環掛起UI線程,表單完全死機。不會繪製,因此您無法看到標籤更新。

您將需要開始使用UdpClient.BeginReceive()或創建一個線程來運行此代碼。如果你使用線程,那麼你需要使用Control.BeginInvoke()來更新標籤。