2014-09-02 226 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