本科基于QT的UDP网络广播程序毕业论文设计和实现.doc
基于QT的UDP网络广播程序摘 要 现在随着计算机网络技术的不断发展,人类正进入信息化社会,使用网络进程信息的传送以成为社会的一种基本的方式,也是未来社会的发展方向。在企业网中,公司要求的速度和时间更为重要,这就要求在信息传送中能够达到快速,安全的目的。同时能够保证信息能够发送给所有的公司员工,这就要求这种网络协议能够使用最少的资源,同时给所有人员发送信息。UDP是一项非常实用可行的网络传输层协议,现在广泛应用于各行各业,并将在今后发挥更大的作用。本文详细阐述了Qt开发环境下广播的实现方法。该系统采用用了基于UDP协议的实现网络广播。同时本论文采用了目前流行的图形界面设计QT技术,在底层用基本的C/ C+语言实现,在上层用QT实现对界面的优化,及美化。最终实现UDP广播,程序运行起来可向多个用户发送UDP报文,并能够在界面上显示报文,用户与发送报文的可以相互通信。 关键字:广播;QT;UDPUDP broadcast network program based on QTAbstractNow the rapid development of computer network technology, man is entering the information society, the use of network information transmission process to become a basic mode of society, but also the future development direction of the society. In the enterprise network, companies require speed and time is more important, it requires to achieve fast in the information transmission, the purpose of safety. At the same time to ensure that information can be sent to all the employees of the company, which equires the network protocol can use the least resources, at the same time to all staff to send a message. UDP is a very practical network transport layer protocol is feasible, is now widely used in all walks of life, and will in the future play a greater role. This paper describes in detail the implementation method of the development environment of Qt broadcast.The system adopted by the network broadcast based on UDP protocol. At the same time, this paper uses a graphical interface design popular QT technologies, using basic C/ C+ language in the bottom, to realize the optimization of the interface with the QT on the upper layer, and landscaping.The final realization of UDP broadcasting, programs run up to multiple users send UDP message, and can display the message on the screen, can communicate with users and sending message.Keywords: broadcast;QT;UDP目 录摘 要iAbstractii1. 绪论11.1 研究背景11.2 系统的可行性分析11.2.1 技术方面的可行性11.2.2 经济方面的可行性21.3 展望21.4 研究目标32. 相关技术理论42.1 UDP协议42.2 UDP报文42.3 套结字52.4 套接字地址:主机与端口72.5 端口号72.6 报头的校验值82.7 信号和槽机制83. 系统总体的描述103.1 系统基本简介和概要103.2 系统能够完成的功能概要103.3 软件的特点103.3.1 单播的特点103.3.2 广播的特点103.3.3 系统创新点114. 系统分析与总体设计124.1 系统需求分析124.2 系统开发及运行环境124.3 系统主要功能要求124.4 系统总体设计134.5 各个模块的设计和功能154.5.1 单播模块154.5.2 广播模块164.6 系统的流程165. 网络广播程序的详细设计205.1 界面设计205.2 模块功能设计216. 软件测试326.1测试的目的及重要性326.2测试的方法326.3测试用例33结论39参考文献40致谢41外文原文42中文翻译481. 绪论1.1 研究背景 近来随着计算机的快速发展,科学技术突飞猛进的发展,知识经济的初见端倪,目前基于UDP协议的信息传送程序给我们的生活带来的很大的方便,现在,企业、机关、学校都建立起了自己的局域网,在局域网里,我们可以通过它,实现在局域网里方便的联络,进行文件传输,消息的发布,自己共享内容的简介等。 在学校里,UDP广播可以起到方便同学之间,教师之间,师生之间的相互联络,这样,不用上Internet,可以节省资源,在学校这个大环境里,就可以方便学校与同学之间,教师与同学之间的联络,学生可以通过它随时收听学校及导员发布的信息。并能最大度地利用现有的网络资源,极大地提高工作效率。为了适应校园网的建设,实现校园网内进行消息发布,学生交流,师生交流,网上作业等功能。 在公司企业建立起的局域网里,应用于局域网内企业(组织)内部成员之间的交流领域,在没有因特网的支持下也可以进行即时通讯,亦因此使之更安全、更高效;同时因为它界面简洁实用,没有娱乐功能,所以简单易用,是企业(组织)成员更加专注于工作,减少不必要的财力和人力资源浪费。,对于企业来说提高企业的办事效率,提高企业的综合素质,是一个企业不断进步迈向一个新台阶的重要步骤。外了适应企业的快速发展,提高企业的管理水平,方便企业与内部员工的信息交流,节省办公开销,企业很需要这样一个程序。为了在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作并能独立地进行数据报的发送和接收,设计用户数据报协议UDP。UDP是Use Datagram Protocol的简称,中文名用户数据报协议,是一种非连接式的通信协议,不需要建立有效的通讯连接,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务. UDP在IP报文的协议号是17 ,UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的广播和多播是基于UDP协议的两种消息发送机制.广播数据即从一个工作站发出,局域网内的其他所有工作站都能收到它1.2 系统的可行性分析1.2.1 技术方面的可行性本软件通过QT技术基于UDP协议实现广播(Broadcast),单播(Unicast),(1)UDP协议UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。UDP是一个无连接协议,传输数据之前源端和终端建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。(2)QT技术QT是Trolltech公司的标志性产品,是跨平台的C+图形用户界面(GUI)工具包,QT应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置。它对不同平台的专门API进行专门的封装(文件处理,网络等),QT API对所有支持平台都是一致的,从而可以进行独立于平台的程序开发和配置。Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。(3)C+编程技术C+是一种面向对象的通用型程序设计语言,他是一种更好的C,支持抽象的数据,支持通用性程序设计,具有更好的可移植性。(4)TCP/IP协议技术在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。1.2.2 经济方面的可行性目前基于UDP和QT的技术的软件已经很多,但本软件强化了对单播、广播、组播的理解,能够根据他们的特性,在不同的应用场合选择使用不同的功能,并且在一些细节方面做出改进,改善图形化界面的可视效果,以及增删button,便于用户操作,在市场上仍有广阔的发展空间。1.3 展望UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的,不可靠的协议。UDP在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网。由于UDP采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。UDP适合一些实时的应用,如IP电话,视频会议,它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据,但是延迟不能太大。基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。广播系统具有实用性、经济性、便捷性等特点,广泛应用于各种公共场合。在楼宇智能消防系统中,它实现了报警控制中心向各分控点的语音广播。在灾时疏散人员、调配现场工作人员,它都发挥着不可替代的作用,消防广播是系统中的关键组成部分之一,已经成为其中不可缺少的组成部分。在网络会议中,服务器端负责进行用户管理、信息交互以及表决统计;客户端则实现收听发言,公开发言,私下讨论、投票表决等功能。在学校的考试系统中,老师通过服务端通过广播的形式负责试题的发送,学生在客服端接收试题,并且对试题的异常可以提出申请,老师收到申请后,以单播的形式处理异常,保证每个考生顺利完成考试。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成。目前基于UDP协议的信息传送程序给我们的生活带来的很大的方便,对于企业来说提高企业的办事效率,提高企业的综合素质,是一个企业不断进步迈向一个新台阶的重要步骤。外了适应企业的快速发展,提高企业的管理水平,方便企业与内部员工的信息交流,节省办公开销,企业很需要这样一个程序。而且,如果这样的程序还是跨平台的程序的话,那将会给我们的开发节省了大量的时间。QT正是一个支持多平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。所以使用QT作为应用程序框架是一个不错的选择。1.4 研究目标现在科技越来越发达,手机上的软件,电脑上的软件越来越多,所以开发小的程序也越来越有必要。QT具备跨平台,易扩展,性能稳定等优点。因此,以嵌入式处理器作为硬件平台,以QT作为程序框架,两者的完美结合必将成为未来技术的发展方向。基于上述背景,开发一个UDP网络广播项目,使用linux搭配qt来构建这个项目。利用QT4作为系统应用层的程序框架。开发一个可以运行的网络广播程序。这个程序虽然是在linux下开发的,但是它是可移植的,在windows下也可以运行。 2. 相关技术理论2.1 UDP协议UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的络传输层协议。与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成1,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。2.2 UDP报文UDP报头由4个域组成,其中每个域各占用2个字节,具体如图2-1 UDP每个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。图2-1 UDP 报文分层封装:在TCP/IP协议层次模型中,UDP位于IP层之上。应用程序访问UDP层然后使用IP层传送数据报。IP层的报头指明了源主机和目的主机地址,而UDP层的报头指明了主机上的源端口和目的端口。分解操作:UDP的复用、分解与端口UDP软件应用程序之间的复用与分解都要通过端口机制来实现。每个应用程序在发送数据报之前必须与操作系统协商以获得协议端口和相应的端口号。UDP分解操作:从IP层接收了数据报之后,根据UDP的目的端口号进行分解操作。UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据包通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。2.3 套结字应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了称为套接字(Socket)的接口,区分不同应用程序进程间的网络通信和连接。网络化的应用程序在开始任何通讯之前都必需要创建套接字。就像电话的插口一样,没有它就完全没办法通信。生成套接字,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。 Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入 Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中,如图2-2详细描述了套接字。图2-2 关于套接字上图,Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。假设在图中的网络中添加第三个主机Host C,那么Host A怎么知道信息被正确传送到Host B而不是被传送到Host C中了呢?基于TCP/IP网络中的每一个主机均被赋予了一个唯一的IP地址,IP地址是一个32位的无符号整数,由于没有转变成二进制,因此通常以小数点分隔,如:198.163.227.6,正如所见IP地址均由四个部分组成,每个部分的范围都是0-255,以表示8位地址。值得注意的是IP地址都是32位地址,这是IP协议版本4(简称Ipv4)规定的,目前由于IPv4地址已近耗尽,所以IPv6地址正逐渐代替Ipv4地址,Ipv6地址则是128位无符号整数。假设第二个程序被加入图中的网络的Host B中,那么由Host A传来的信息如何能被正确的传给程序B而不是传给新加入的程序呢?这是因为每一个基于TCP/IP网络通讯的程序都被赋予了唯一的端口和端口号,端口是一个信息缓冲区,用于保留Socket中的输入/输出信息,端口号是一个16位无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号),低于256的短口号保留给标准应用程序,比如pop3的端口号就是110,每一个套接字都组合进了IP地址、端口、端口号,这样形成的整体就可以区别每一个套接字。要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。套接字起源于20世纪70年代加州大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯。这也被称作进程间通讯,或IPC。套接字有两种,分别是基于文件型的和基于网络型的。Unix套接字是我们要介绍的第一个套接字家族。其“家族名”为AF_UNIX(在POSIX1.g标准中也叫AF_LOCAL),表示“地址家族:UNIX”。包括Python在内的大多数流行平台上都使用术语“地址家族”及其缩写“AF”。而老一点的系统中,地址家族被称为“域”或“协议家族”,并使用缩写“PF”而不是“AF”。同样的,AF_LOCAL(在2000-2001年被列为标准)将会代替AF_UNIX。不过,为了向后兼容,很多系统上,两者是等价的。Python自己则仍然使用AF_UNIX。由于两个进程都运行在同一台机器上,而且这些套接字是基于文件的。所以,它们的底层结构是由文件系统来支持的。这样做相当有道理,因为,同一台电脑上,文件系统的确是不同的进程都能访问的。另一种套接字是基于网络的,它有自己的家族名字:AF_INET,或叫“地址家族:Internet”。还有一种地址家族AF_INET6被用于网际协议第6版(IPv6)寻址上。还有一些其他的地址家族,不过,它们要么是只用在某个平台上,要么就是已经被废弃,或是很少被使用,或是根本就还没有实现。所有地址家族中,AF_INET是使用最广泛的一个。Python 2.5中加入了一种Linux套接字的支持:AF_NETLINK(无连接(稍后讲解))套接字家族让用户代码与内核代码之间的IPC可以使用标准BSD套接字接口。而且,相对之前那些往操作系统中加入新的系统调用、proc文件系统支持或是“IOCTL”等复杂的方案来说,这种方法显得更为精巧,更为安全Python只支持AF_UNIX,AF_NETLINK,和AF_INET家族。由于我们只关心网络编程,所以在本章的大部分时候,我们都只用AF_INET。2.4 套接字地址:主机与端口 如果把套接字比做电话的插口即通信的最底层结构,那主机与端口就像区号与电话号码 的一对组合。有了能打电话的硬件还不够,你还要知道你要打给谁,往哪打。一个因特网地址由网络通信所必需的主机与端口组成。而且不用说,另一端一定要有人在听才可以。否则,你就会听到熟悉的声音“对不起,您拨的是空号,请查询后再拨”。你在上网的时候,可能也见过类似的情况,如“不能连接该服务器。服务器无响应或不可达。合法的端口号范围为065535。其中,小于1024的端口号为系统保留端口。如果你使用的是Unix操作系统,那么就可以通过/etc/services文件获得保留的端口号(及其对应的服务/协议和套接字类型)。 2.5 端口号为了区分一台主机接受到的数据包应该交给哪个进程进行处理,使用端口号。UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错2.6 报头的校验值UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必须具有校验值。许多链路层协议都提供错误检查,包括流行的以太网协议,也许你想知道为什么UDP也要提供检查和校验。其原因是链路层以下的协议在源端和终端之间的某些通道可能不提供错误检测。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。UDP Helper是实现对指定UDP端口广播报文的中继转发,即将指定UDP端口的广播报文转换为单播报文发送给指定的服务器,起到中继的作用.2.7 信号和槽机制 在对于事件处理的问题,较早的工具包使用“回调”的方式来实现。回调是指一个函数的指针,如果你希望一个处理函数同志你一些事件,你可以把另一个函数的指针传递给处理函数。处理函数在适当的时候会调用回调函数。 采用回调方式实现对象间的通讯有两个主要缺点,首先回调函数不是类型安全的,我们不能确定处理函数使用了正确的参数来调用回调函数,第二,回调函数和处理函数间的联系非常紧密,因为处理函数必须知道要调用哪个回调函数。/ 信号和槽机制就是:当一个特定的事件发生时,一个或几个被指定的信号就被发射,槽就是一个返回值为void的函数,如果存在一个或几个槽和该信号相连接,那在该信号被发射后,这个(些)槽(函数)就会立刻被执行。QT的窗口部件已经有很多预定义的信号,也有很多预定义的槽,但我们总是通过继承来加入我们自己的信号和自己的槽,这样我们就可以处理感兴趣的信号了。凡是从QObject类或者它的某个子类继承的所有类都可以包含信号和槽。当某个事件发生后,被指定的信号就会被发射,它不知道也没有必要知道是否有 槽连接了该信号,这就是信息封装。槽是可以用来接收信号的正常的对象的成员函数,一个槽不知道它是否被其它信号连接。可以把一个信号和一个槽进行单独连接,这时槽会因为该信号被发射 而被执行;也可以把几个信号连接在同一个槽上,这样任何一个信号被发射都会使得该槽被执行;也可以把一个信号和多个槽连接在一起,这样该信号一旦被发射, 与之相连接的槽都会被马上执行,但执行的顺序不确定,也不可以指定;也可以把一个信号和另一个信号进行连接,这样,只要第一个信号被发射,第二个信号立刻就被发射。 2.8 绑定由管理机构指定端口和动态绑定的方式,UDP/TCP 中采用端口(port)来标识 传输端口代表 TCP/UDP 的传输服务访问点,在进程通信中标识相互通信的进程通信的对端进程地址可表示为: (IP address , port) 传输端口的绑定(binding)进程在某个传输端口进行数据传输前,必须首先通过系统调用与该端口建立绑定关系 UDP/TCP 的传输端口号(port number) 端口号用于标识 UDP/TCP 的传输端口 UDP/TCP 协议各分别可以提供最多 64K 个传输端口进程通信时,必须了解对端进程的地址 (IP + port)动态绑定方式(本地分配) TCP/IP 系统种端口分配方法应用进程通信采用“客户-服务器”(client-server)模式将传输端口划分为两类:保留端口和自由端口。保留端口(well-known port):为服务进程全局分配的端口自由端口是在进程需要进行通信时,由本地进行动态分配的客户进程首先动态申请一个本地自由端口号,再通过服务进程所公布的保留端口与服务器进程建立联系,并进行相应协商;上述过程成功后中,就可开始进程间的通信。 3. 系统总体的描述3.1 系统基本简介和概要UDP协议,即拥护数据报协议(Use Datagram Protocol),是一个简单的面向数据报的传输层协议。他不提供可靠性,即只把应用程序传给IP层的数据发送出去,但是并不能保证他们能到达目的。广播和组播是基于UDP协议的两种消息发送机制,广播数据即从一个工作站发出,局域网内的其他所有工作站都能收到它。IP协议下,组播是广播的一种变形,IP组播要求将对收发数据感兴趣的所有主机加入到一个特定的组。Qt是诺基亚开发的一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。通过QT技术和UDP实现整个软件的功能包括:广播,单播3.2 系统能够完成的功能概要 对于广播报文,能够实现一对一的消息发送机制,只有特定的一个IP才能够接收到信息对于广播,从一个工作站发出,局域网内的其他所有工作站都能收到它。3.3 软件的特点3.3.1 单播的特点在客户端与服务器端建立一个单独的数据通道,从一台服务器送出的每个数据包只能传送到特定的客户端,但是由于其能够针对每个客户的及时响应,所以现在的网页浏览全部采用的是单播协议。他的优点在于服务器及时响应客户的请求,而且能够针对每个客户不同的请求发送不同的数据,容易实现个性化服务。不足之处在于,如果10个客户机需要相同的数据时,服务器要逐一传送,重复10次相同的工作,增加了服务器的负载。3.3.2 广播的特点广播是多点传递的最普遍的形式 ,它向每一个目的节点传送一个分组的拷贝 。网络设备简单,维护简单,服务器流量负载很低,主机之间“一对所有”的通讯模式,网络对每一台主机发出的信号都就行无条件的复制并转发,所有的主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本很低廉。需要强调的是:广播无法针对每个客户的要求和时间及时提供个性化服务,对此信息不感兴趣的主机也必须收到,相反,有可能由于网络拥塞,想得到的却得不到,会耗费大量的主机资源和网络资源,而且不能穿透子网,因为路由器会封锁广播通信,广播传输会增加非接收者的开销。3.3.3 系统创新点现今社会处于读图时代,人们习惯于对事物进行视觉上的接受,如何适应在这种环境下设计出来便于人们接受的产品,成为人们研发的重要方向,而用QT设计出来的网络广播程序,不仅克服了传统的广播中声音稍纵即逝的局限性。也改善图形化界面的可视效果,便于用户操作。使网络广播在市场上实现效益的最大化。具体来说,用户可根据不同的选项选择消息发送的样式,自主选择在本机网络发送还是在局域网上发送, 以模块化方式组织程序各个模块之间的联系,在需要时可手动加入新的模块。并且强化了对单播、广播的理解,能够根据他们的特性,在不同的应用场合选择使用不同的功能。通常UDP与服务器是分开的,我实现的程序将客户端于服务端封装在一起,节约了资源,提高了软件的重用。4. 系统分析与总体设计4.1 系统需求分析 广播系统具有实用性、经济性、便捷性等特点,广泛应用于各种公共场合,如智能楼宇消防系统,网络教学。而UDP能够排除信息可靠传递机制,将安全和排序等功能移交给上层应用来完成。能够根据不同的应用场合以最快,最完整,最节省资源的方式将信息传递给用户,使用户的利益得到了最大的保障。所以说用UDP协议来传递信息给我们的生活带来的很大的方便,对于企业来说提高企业的办事效率,适应企业的快速发展,提高企业的管理水平,方便企业与内部员工的信息交流,节省办公开销,企业很需要这样一个程序。4.2 系统开发及运行环境硬件平台:q 惠普6450B软件平台:q 操作系统:LINUXq 开发工具包:QT 4.6q 分辨率:最佳效果1024×768像素。 4.3 系统主要功能要求系统设计目标如下:主要功能包括:TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能作出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据包。不同于TCP,UDP并不能确保数据的发送和接收顺序。鉴于以上程序要求,我采用的是基于UDP协议的Socket编程方式。对应套接字的类型选择面向连接的流式套接字(SOCK_STREAM),QUdpSocket类提供一个udp套接字,QUdpscoket是QabstractSocket类非常方便的一个子类QUDPServer类用来与远端服务器连线,如果开发人员要接受客户端连线,则使用QUDPServer。QUDPServer使用listen()方法开始倾开所指定的连接埠,开发人员可以使用Listening()方法测试是否正在倾听连线。4.4 系统总体设计 模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。模块化是一种处理复杂系统分解为更好的可管理模块的方式。 模块化用来分割,组织和打包软件。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。 模块具有以下几种基本属性:接口、功能、逻辑、状态,功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。 在系统的结构中,模块是可组合、分解和更换的单元。模块化是一种处理复杂系统分解成为更好的可管理模块的方式。它可以通过在不同组件设定不同的功能,把一个问