全面掌握VisualC#实现UDP协议(一)

导读:
   一.走进UDP协议:
  UDP(User Datagram Protocol)协议就是“用户数据报协议”,它是一种无连接的协议,无连接主要是和TCP协议相比较的。我们知道当利用TCP协议传送数据的时候,首先必须先建立连接(也就是所谓的握手)才可以传输数据。而当计算机利用UDP协议进行数据传输的时候,发送方只需要知道对方的IP地址和端口号就可以发送数据,而并不需要进行连接。当然如果你非要进行连接,通过Visual C#也是可以实现的,但前提是要确定连接的远程主机的端口号处于监听状态,否则程序会出现不必要的错误,但这是种画蛇添足的做法,不仅丢失了UDP协议的无连接传送数据的特点和优点,而且还给程序运行带来了不安定的因素。所以这种方法并不值得提倡。
  由于UDP协议并不需要进行确定的连接,所以编写基于UDP协议的应用程序比起编写基于TCP协议的应用程序要简单些(程序中可以不需要考虑连接和一些异常的捕获工作)。但同时也给基于UDP协议编写的程序带来了一个致命的缺点,UDP由于不提供可靠数据的传输,当计算机之间利用UDP协议传送数据的时候,发送方只管发送数据,而并不确认数据是否被对方接收。这样就会导致某些UDP协议数据包在传送的过程中丢失,尤其网络质量不令人满意的情况下,丢失数据包的现象会更严重。这就是为什么在网络上传输重要数据不采用UDP协议的原因。
  但是我们也不能因为这一个缺点就全面否定UDP协议,这是因为虽然利用UDP协议来传送安全性要求高的数据是不适合的,但对于那些不重要的数据,或者即使丢失若干数据包也不影响整体性的数据,如音频数据,视频数据等,采用UDP协议就是一个非常不错的选择。如目前网络流行的很多即时聊天程序,如OICQ和ICQ等,采用的就是UDP协议。同时虽然UDP协议无法保证数据可靠性,但具有对网络资源开销较小,数据处理速度快的优点,所以在有些对数据安全性要求不是很高的情况下,采用UDP协议也是一个非常不错的选择。
  总结一下上面的内容,可见UDP是一种不面向连接的网络协议,既有其优点,也有其不足,具体如下:
  1.基于UDP协议的网络应用程序,实现起来比较简单,并且基于UDP协议的网络应用程序在运行时,由于受到环境影响较小,所以不容易出错。
  2.UDP协议占用网络资源较少,数据处理较快,所以在网络中传送对安全性要求不是十分高数据时,其优点比较明显。所谓对安全性要求不高的数据,是指那些不重要的数据,或者是即使丢失若干数据,也不影响其整体的数据,如音频数据等。目前很多流行的网络应用程序都是基于UDP协议的,如OICQ、ICQ等。
  3.由于其不是面向连接的网络协议,其缺点也是非常明显的,有些时候甚至是致命的。因为使用UDP协议来传送数据,在数据发送后,在发送方并不确认对方是否接收到。这样就可能导致传送的数据在网络中丢失,尤其在网络条件并不很好的情况下,丢失数据包的现象就更多。所以传送重要数据一般不采用UDP协议。
   二.简介Visual C#发送、接收UDP数据包使用的主要类及其用法:
  用Visual C#实现UDP协议,最为常用,也是最为关键的类就是UdpClient,UdpClient位于命名空间System.Net.Sockets中,Visual C#发送、接收UDP数据包都是通过UdpClient类的。表01和表02是UdpClient类中常用方法和属性及其简要说明。
  方法 说明 Close 关闭 UDP 连接 Connect 建立与远程主机的连接 DropMulticastGroup 退出多路广播组 JoinMulticastGroup 将 UdpClient 添加到多路广播组 Receive 返回已由远程主机发送的 UDP 数据文报 Send 将 UDP 数据文报发送到远程主机
  表01:UdpClient类中常用方法及其说明。
  属性 说明 Active 获取或设置一个值,该值指示是否已建立了与远程主机的连接 Client 获取或设置基础网络套接字 表02:UdpClient类中常用方法及其说明。
  1.Visual C#使用UdpClient类发送UDP数据包:
  在具体使用中,一般分成二种情况:
  (1). 知道远程计算机IP地址:
  "Send"方法的调用语法如下:
  public int Send ( byte[] dgram , int bytes , IPEndPoint endPoint ) ;
  参数说明:
  dgram 要发送的 UDP 数据文报(以字节数组表示)。
  bytes 数据文报中的字节数。
  endPoint 一个 IPEndPoint,它表示要将数据文报发送到的主机和端口。
  返回值 已发送的字节数。
  下面使用UdpClient发送UDP数据包的具体的调用例子:
  IPAddress HostIP = new IPAddress.Parse ( "远程计算机IP地址" ) ;IPEndPoint host = new IPEndPoint ( HostIP , 8080 ) ;UdpClient.Send ( "发送的字节" , "发送的字节长度" , host ) ;
  (2). 知道远程计算机名称::
  知道远程计算机名称后,利用"Send"方法直接把UDP数据包发送到远程主机的指定端口号上了,这种调用方式也是最容易的,语法如下:
  public int Send ( byte[ ] dgram , int bytes , string hostname , int port ) ;
  参数说明:
  dgram 要发送的 UDP 数据文报(以字节数组表示)。
  bytes 数据文报中的字节数。
  hostname 要连接到的远程主机的名称。
  port 要与其通讯的远程端口号。
  返回值 已发送的字节数。
  2.Visual C#使用UdpClient类接收UDP数据包:
  接收UDP数据包使用的是UdpClient中的“Receive”方法。此方法的调用语法如下:
  public byte [] Receive ( ref IPEndPoint remoteEP ) ;
  参数
  remoteEP 是一个 IPEndPoint类的实例,它表示网络中发送此数据包的节点。
  如果指定了远程计算机要发送到本地机的端口号,也可以通过侦听本地端口号来实现对数据的获取,下面就是通过侦听本地端口号“8080”来获取信息代码:
  server = new UdpClient ( ) ;receivePoint = new IPEndPoint (new IPAddress ( "127.0.0.1" ) , 8080 ) ;byte[] recData = server.Receive ( ref receivePoint ) ;
   三.Visual C#实现UDP协议之网络对时系统的体系结构及功能简介:
  在局域网中有很多应用软件为了协同工作,需要保证客户机上时间统一,而为了实现这一点,通常的做法是客户机从一个时间相对正确的服务器读取时间,以此来校正本地时间。如经常看到的GPS对时系统等。本节编写的局域网上对时系统的主要的功能是保证局域网上计算机时间、日期的统一。网络对时程序是体系结构分成服务器端程序和客户端程序二个部分,具体的作法是:在同一个网段上,固定一台计算机作为对时的服务器,在这个网段的所有计算机都可以读取这台服务器上的时间和日期,并依此服务器上的时间和日期为基准,来确定本地的时间和日期。在服务器端程序需要达到以下功能:
  能够接收局域网中任一台客户机的请求
  记录请求客户机的计算机名称,和请求时间
  准确发送服务器端的时间和日期
  端程序要达到以下功能:
  能够设定服务器的主机或者IP地址
  能够接收服务器端发送的时间、日期信息
  能够以接收的服务器端时间、日期为基准,校正本地时间
  因此在具体用Visual C#实现网络对时系统时就包括二个部分:服务器端程序和客户端程序。下面首先介绍Visual C#实现网络对时系统中服务器端程序的具体步骤。
   四.Visual C#实现网络对时系统之服务器端程序的具体步骤:
  服务器端程序比客户端程序相对要简单,主要因是服务器端程序的工作比较简单,就
  是接收客户端的对时请求、发送服务器端的时间数据。而于客户端不仅要传送和接收数据,还要把服务器端的时间提取出来,并以此来修改本地计算机的时间、日期。下面是用Visual C#实现网络对时系统之服务器端程序的具体步骤步骤。
  1.启动Visual Studio .Net。
  2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
  3.将【项目类型】设置为【Visual C#项目】。
  4.将【模板】设置为【Windows应用程序】。
  5.在【名称】文本框中输入【UDP对时服务器端】。
  6.在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮
  7.在【解决方案资源管理器】窗口中,双击Form1.cs文件,进入Form1.cs文件的编辑界面。
  8.在Form1.cs文件的开头,用下列导入命名空间代码替代系统缺省的导入命名空间代码。
  using System ;using System.Drawing ;using System.Collections ;using System.ComponentModel ;using System.Windows.Forms ;using System.Data ;usi

本文转自
http://study.qqcf.com/web/224/23990.htm

你可能感兴趣的:(数据结构,应用服务器,网络应用,网络协议,C#)