2014-09-02 188 views
1

如何在c#WinForms應用程序中使用UDP連接服務器客戶端?如何連接服務器客戶端與UDP?

我寫了一個控制檯applicaton服務器程序,但我需要它作爲WinForms應用程序。

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Net; 
using System.Net.Sockets; 
using System.IO; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Windows; 

namespace UDP_Server 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     int recv; 
     byte[] data = new byte[1024]; 
     IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 904); 
     Socket newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     newSocket.Bind(endpoint); 

     Console.WriteLine("Waiting for a client..."); 

     IPEndPoint sender = new IPEndPoint(IPAddress.Any,904); 
     EndPoint tmpRemote = (EndPoint)sender; 

     recv = newSocket.ReceiveFrom(data, ref tmpRemote); 


     Console.Write("Message received from {0}", tmpRemote.ToString()); 
     Console.WriteLine(Encoding.ASCII.GetString(data,0,recv)); 

     string welcome = "Sunucuya hosgeldiniz !"; 
     data = Encoding.ASCII.GetBytes(welcome); 

     if (newSocket.Connected) 
      newSocket.Send(data); 

     while (true) 
     { 
      if (!newSocket.Connected) 
      { 
       Console.WriteLine("Client Disconnected."); 
       //break; 
      } 

      data = new byte[1024]; 
      recv = newSocket.ReceiveFrom(data,ref tmpRemote); 

      if (recv == 0) 
       // break; 

      Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 

     } 

     //newSocket.Close(); 

    } 
} 
} 

我需要改變這個代碼WinForms應用程序。我怎樣才能做到這一點 ?此外,我還需要一個客戶端代碼。

回答

0

1. 你必須將你的代碼移動到另一個線程li ke背景工作者,所以你不要阻止你的形式(它會顯示爲不響應,如果你不這樣做)。

2. 你不應該使用while(true)。使用事件接收數據,以便在必要時顯示它。

3. 要在窗體上顯示此類信息,您必須調用控件,因爲它將從另一個線程中調用。

你應該看看這裏的事件: C# SocketAsyncEventArgs handling receive and send data