UDP通信客户端

       UDP(User Datagram Protocol)协议就是“用户数据报协议”,它是一种无连接的协议,无连接主要是和TCP协议相比较的。我们知道当利用TCP协议传送数据的时候,首先必须先建立连接(也就是所谓的握手)才可以传输数据。而当计算机利用UDP协议进行数据传输的时候,发送方只需要知道对方的IP地址和端口号就可以发送数据,而并不需要进行连接。
       由于UDP协议并不需要进行确定的连接,所以编写基于UDP协议的应用程序比起编写基于TCP协议的应用程序要简单些(程序中可以不需要考虑连接和一些异常的捕获工作)。但同时也给基于UDP协议编写的程序带来了一个致命的缺点,UDP由于不提供可靠数据的传输,当计算机之间利用UDP协议传送数据的时候,发送方只管发送数据,而并不确认数据是否被对方接收。这样就会导致某些UDP协议数据包在传送的过程中丢失,尤其网络质量不令人满意的情况下,丢失数据包的现象会更严重。这就是为什么在网络上传输重要数据不采用UDP协议的原因。

       但对于那些不重要的数据,或者即使丢失若干数据包也不影响整体性的数据,如音频数据,视频数据等,采用UDP协议就是一个非常不错的选择。UDP协议无法保证数据可靠性,但具有对网络资源开销较小数据处理速度快的优点,所以在有些对数据安全性要求不是很高的情况下,采用UDP协议也是一个非常不错的选择。

1.Visual C#使用UdpClient类发送UDP数据包:
IPAddress HostIP = new IPAddress.Parse ( "远程计算机IP地址" ) ;

IPEndPoint host = new IPEndPoint ( HostIP , 8080 ) ;

UdpClient.Send ( "发送的字节" , "发送的字节长度" , host ) ;

2.Visual C#使用UdpClient类接收UDP数据包:
server = new UdpClient ( ) ;

receivePoint = new IPEndPoint (new IPAddress ( "127.0.0.1" ) , 8080 ) ;

byte[] recData = server.Receive ( ref receivePoint ) ;
以上摘自: 乘风原创程序(http://www.qqcf.com) 详细出处参考:http://study.qqcf.com/web/224/23990.htm

 

以下是用UDP协议编写的一个客户端程序:

static void Main()
        {
            UdpClient udpClient;
            try
            {
                int port = 1080;
                IPAddress ip = IPAddress.Parse("192.168.0.64");
                IPEndPoint remoteHost = new IPEndPoint(ip,port);
                udpClient = new UdpClient(remoteHost);   //创建UDP客户端(注意:用到IP和Port),此句为程序关键
                udpClient.Connect(remoteHost);               //用UDP实例进行连接
                Console.WriteLine("Starting…");
                while (udpClient != null)
                {
                    try
                    {
                        Console.WriteLine("waiting for connection…");
                        byte[] buf = udpClient.Receive(ref remoteHost);         //用UDP实例接收数据(也可用.Send发送数据)
                        string bufs = Encoding.Default.GetString(buf, 0, buf.Length);              //byte转为string
                        Console.WriteLine("Host:" + remoteHost.Address.ToString() + "rn"+
                                                      "Port:" + remoteHost.Port.ToString() + "rn"+
                                                      "Data length:" + buf.Length.ToString()+"rn");
                        Console.WriteLine(bufs);                     //显示接收的数据
                    }
                    catch (Exception y)
                    {
                        Console.WriteLine(y.Message);

                    }

                }
                Console.WriteLine("Ending…");
                udpClient.Close();            //通信完后关闭
            }
            catch (Exception y)
            {
                Console.WriteLine(y.Message);
            }
        }

红色标出了重要的对象及方法;蓝色标出了重要的类;白色为运行后显示的内容。

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s