C#网络编程专题6UDP编程.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:12 大小:383KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C#网络编程专题6UDP编程.doc

C#网络编程专题6UDP编程.doc

预览

免费试读已结束,剩余 2 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://www.cnblogs.com/zhili/archive/2012/09/01/UDP_Multicast.html"[C#网络编程系列]专题六:UDP编程(转载:HYPERLINK"http://www.cnblogs.com/zhili/archive/2012/08/23/WebServer.html"http://www.cnblogs.com/zhili/archive/2012/08/23/WebServer.html)引用:前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ、MSN和Skype等一些即时通信软件传输层都是应用UDP协议的)底层的传输基础,所以在本专题中就简单介绍下UDP的工作原理和UDP编程的只是,希望可以对刚接触网络编程的朋友起到入门的作用。一、UDP介绍UDP和TCP都是构建在IP层之上传输层的协议,但UDP是一种简单、面向数据报(Sock_Dgram)的无连接协议,提供的是不一定可靠的传输服务。然而TCP是一种面向连接、可靠的,面向字节流(Sock_Stream)的传输协议,对于“无连接”是指在正式通信前不必与对方先建立连接,不管对方状态如何都可以直接发送过去(就如QQ中通过QQ号查看好友后发送添加好友请求,此间不需要考虑对方的状态如何,都照样发送请求)。从UDP和TCP的定义中就可以看出它们两者的区别了,(1)UDP的可靠性不如TCP,因为TCP传输前要首先建立连接,这样就增加了TCP传输的可靠性,所以UDP也被称为不可靠的传输协议,关于TCP的介绍可以看我上一篇博客的介绍。TCP和UDP还有另外一个区别。(2)UDP不能保证有序传输。即UDP不能确保数据的发送和接收顺序。下面就来看看UDP协议的工作原理,对UDP的工作原理有一个好的理解,对后面介绍的UDP编程也是一个好的基础。1.1UDP的工作原理UDP将网络数据流量压缩成数据报的形式,每一个数据报用8个字节(8X8位=64位)描述报头信息,剩余字节包含具体的传输数据。UDP报头(只有8个字节)相当于TCP的报头(至少20个字节)很短,UDP报头由4个域组成,每个域各占2个字节,具体为源端口、目的端口、用户数据报长度和校验和,具体结构见下图(下面也贴出了TCP报文的结构图,与UDP数据报做一个对比的作用):UDP协议和TCP协议都使用端口号为不同的应用保留其各自的数据传输通道这一机制,数据发送方将UDP数据报通过源端口发送出去,而数据接收方则通过目标端口接收数据。1.2UDP的优势前面介绍中说UDP相对于TCP是不可靠的,不能保证有序传输的传输协议,然而UDP协议相对于TCP协议的优势在哪里呢?,UDP相对于TCP的优势主要有三个方面的:(1)UDP速度比TCP快。由于UDP不需要先与对方建立连接,也不需要传输确认,因此其数据的传输速度比TCP快很多。对于一些着重传输性能而不是传输完整性的应用(网络音频播放、视频点播和网络会议等),使用UDP协议更加适合,因为它传输速度快,使通过网络播放的视频音质好、画面清晰。(2)UDP有消息边界。通过UDP协议进行传输的发送方对应用程序交下来的报文,在添加首部后就向下直接交付给IP层。既不拆分也不合并,而是保留这些报文的边界,所以使用UDP协议不需要像TCP那样考虑消息边界的问题,这样就使得UDP编程相对于TCP在接收到的数据处理方面要简单的多。(对于TCP消息边界的问题可以查看相关的文档,在这里我就不列出来了)(3)UDP可以一对多传输由于传输数据部建立连接,也就不需要维护连接状态,因此一台服务器可以同时向多个客户端发送相同的信息。利用UDP可以使用广播或者组播的方式同时向子网的所有客户端进程发送信息,广播和组播的介绍放到后面TCP编程中介绍。上面介绍了UDP协议相对于TCP协议的优势,其中速度快是UDP的最重要的优势,也是像一些网络会议、即时通信软件传输层选择UDP协议进行传输的原因所在。二、.net平台对UDP编程的支持介绍完UDP相对于TCP的优势后,当然很希望在.net平台下开发一个基于UDP协议的一个应用了,然后.net平台下对UDP编程也做了很好的支持,为我们开发基于UDP协议的网络应用提供很多方便之处,下面就简单介绍.net平台下对UDP编程的支持(主要介绍提供的类来对UDP协议进行编程)。.net类库中的UdpClient类对基础的Socket进行了封装,这样就在发送和接受数据时不需要考虑底层套接字的收发时处理的一些细节问题,这样为UDP编程提供了方便,也可以提高开发效率(感觉net就是做这样的事情的