java毕业论文基于UDP协议的可靠通讯系统的设计与实现_第1页
java毕业论文基于UDP协议的可靠通讯系统的设计与实现_第2页
java毕业论文基于UDP协议的可靠通讯系统的设计与实现_第3页
java毕业论文基于UDP协议的可靠通讯系统的设计与实现_第4页
java毕业论文基于UDP协议的可靠通讯系统的设计与实现_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于UDP协议的可靠通讯系统的设计与实现UDP是OSI参考模型中一种无连接的传输层协议,它提供了简单不可靠的信息传送服务。由于UDP的包头包含很少的字节,它在网络传输方面有很大的速度优势。由于UDP存在传输可靠性差的问题,无法实现聊天系统在好友互相聊天时的可靠性传输。文章在细致分析UDP和TCP协议特点的基础上,通过对TCP协议的模拟,设计出了一种新的可靠UDP协议(UDT),大大提高了数据传榆的可靠性。本文结合Java面向对象语言特性和系统的功能需要,对本系统进行了设计与实现。该系统在用户与服务器之间采用C/S架构。使用分层设计的思想分离出视图层、商务逻辑层、hibernate数据库连接层、

2、hibernate数据库存储层。UDT;套接字;Java;多线程;Hibernate Design and Implementation of the Reliable Communication System Based on UDPUDP is the OSI connectionless transport protocol,it provides simple unreliable transport servicesUDP has a transmission speed advantage in the network that is caused by UDP header co

3、nsists of a few fields. UDP has disadvantage of poor reliable, so it cant support the reliable transmission to this project when friends chat with each other. This paper extracts the features of UDP and TCP and proposes a new Reliable UDP(UDT)An object-oriented programming language Java, support man

4、y API , provides a great help for the realization of this chat program .In this thesis, combined with the JAVA object-oriented language feature and the actual need of this program , this Instant Message has been designed and implemented. C/S architecture is used between server and client .Using the

5、idea of the hierarchical design, this system can be separated view layer, business logic layer, Hibernate database access layer and Hibernate database storage layer.UDT; Socket ;Java; Multithread ; Hibernate目 录 TOC o 1-3 h z u HYPERLINK l _Toc325922637 1 绪论 PAGEREF _Toc325922637 h 1 HYPERLINK l _Toc

6、325922638 1.1 课题选择的背景 PAGEREF _Toc325922638 h 1 HYPERLINK l _Toc325922639 1.2 国内外现状及发展趋势 PAGEREF _Toc325922639 h 1 HYPERLINK l _Toc325922640 1.3 本文的主要工作 PAGEREF _Toc325922640 h 2 HYPERLINK l _Toc325922641 1.4 本章小结 PAGEREF _Toc325922641 h 2 HYPERLINK l _Toc325922642 2 涉及的相关技术与协议 PAGEREF _Toc325922642

7、 h 2 HYPERLINK l _Toc325922643 2.1 Java语言技术基础 PAGEREF _Toc325922643 h 3 HYPERLINK l _Toc325922644 2.1.1 Java语言在开发和执行过程中的特点 PAGEREF _Toc325922644 h 3 HYPERLINK l _Toc325922645 2.1.2 Java语言本身的特点 PAGEREF _Toc325922645 h 3 HYPERLINK l _Toc325922646 2.1.3 Java与Hibernate整合使用访问数据库 PAGEREF _Toc325922646 h 6

8、 HYPERLINK l _Toc325922647 2.2 相关的协议介绍 PAGEREF _Toc325922647 h 7 HYPERLINK l _Toc325922648 2.2.1 TCP/IP协议 PAGEREF _Toc325922648 h 7 HYPERLINK l _Toc325922649 2.2.2 UDP协议(用户数据报协议) PAGEREF _Toc325922649 h 8 HYPERLINK l _Toc325922650 2.2.3 TCP协议与UDP协议的比较 PAGEREF _Toc325922650 h 10 HYPERLINK l _Toc32592

9、2651 2.3 基于Socket的编程 PAGEREF _Toc325922651 h 11 HYPERLINK l _Toc325922652 2.4 本章小结 PAGEREF _Toc325922652 h 12 HYPERLINK l _Toc325922653 3 聊天系统的需求分析 PAGEREF _Toc325922653 h 12 HYPERLINK l _Toc325922654 3.1 即时消息的一般需求 PAGEREF _Toc325922654 h 12 HYPERLINK l _Toc325922655 3.1.1 一般即时消息格式需求 PAGEREF _Toc325

10、922655 h 12 HYPERLINK l _Toc325922656 3.1.2 可靠性需求 PAGEREF _Toc325922656 h 12 HYPERLINK l _Toc325922657 3.1.3 性能需求 PAGEREF _Toc325922657 h 12 HYPERLINK l _Toc325922658 3.2 即时消息的协议需求 PAGEREF _Toc325922658 h 13 HYPERLINK l _Toc325922659 3.3 即时消息的安全需求 PAGEREF _Toc325922659 h 13 HYPERLINK l _Toc325922660

11、 3.4 即时通讯系统需求 PAGEREF _Toc325922660 h 13 HYPERLINK l _Toc325922661 3.4.1 注册需求 PAGEREF _Toc325922661 h 13 HYPERLINK l _Toc325922662 3.4.2 通讯需求 PAGEREF _Toc325922662 h 13 HYPERLINK l _Toc325922663 3.5 系统的用例分析 PAGEREF _Toc325922663 h 13 HYPERLINK l _Toc325922664 3.5.1 服务器端用例图 PAGEREF _Toc325922664 h 14

12、 HYPERLINK l _Toc325922665 3.5.2 客户端用例图 PAGEREF _Toc325922665 h 14 HYPERLINK l _Toc325922666 3.6 本章小结 PAGEREF _Toc325922666 h 15 HYPERLINK l _Toc325922667 4 系统总体设计 PAGEREF _Toc325922667 h 15 HYPERLINK l _Toc325922668 4.1 功能模块划分 PAGEREF _Toc325922668 h 16 HYPERLINK l _Toc325922669 4.1.1 服务器端 PAGEREF

13、_Toc325922669 h 16 HYPERLINK l _Toc325922670 4.1.2 客户端 PAGEREF _Toc325922670 h 16 HYPERLINK l _Toc325922671 4.2 系统的多线程设计 PAGEREF _Toc325922671 h 17 HYPERLINK l _Toc325922672 4.2.1 服务器端的多线程设计 PAGEREF _Toc325922672 h 17 HYPERLINK l _Toc325922673 4.2.2 客户端的多线程设计 PAGEREF _Toc325922673 h 18 HYPERLINK l _

14、Toc325922674 4.3 本章小结 PAGEREF _Toc325922674 h 18 HYPERLINK l _Toc325922675 5 系统关键技术及实现 PAGEREF _Toc325922675 h 18 HYPERLINK l _Toc325922676 5.1 消息格式的设计与实现 PAGEREF _Toc325922676 h 18 HYPERLINK l _Toc325922677 5.1.1 客户端消息格式的设计 PAGEREF _Toc325922677 h 18 HYPERLINK l _Toc325922678 5.1.2 服务器端的消息格式 PAGERE

15、F _Toc325922678 h 19 HYPERLINK l _Toc325922679 5.2 Hibernate数据库设计 PAGEREF _Toc325922679 h 20 HYPERLINK l _Toc325922680 5.2.1 数据库的选择 PAGEREF _Toc325922680 h 21 HYPERLINK l _Toc325922681 5.2.2 数据库表设计 PAGEREF _Toc325922681 h 21 HYPERLINK l _Toc325922682 5.2.3 Hibernate伪面向对象数据库的设计与实现 PAGEREF _Toc3259226

16、82 h 22 HYPERLINK l _Toc325922683 5.3 客户端好友聊天时的可靠传输 PAGEREF _Toc325922683 h 25 HYPERLINK l _Toc325922684 5.3.1 双方的连接建立与关闭 PAGEREF _Toc325922684 h 25 HYPERLINK l _Toc325922685 5.3.2 发送方和接收方的设计 PAGEREF _Toc325922685 h 25 HYPERLINK l _Toc325922686 5.3.3 发送方的流量控制 PAGEREF _Toc325922686 h 26 HYPERLINK l _

17、Toc325922687 5.3.4 接收方的确认技术 PAGEREF _Toc325922687 h 26 HYPERLINK l _Toc325922688 5.4 本章小结 PAGEREF _Toc325922688 h 27 HYPERLINK l _Toc325922689 6 系统测试 PAGEREF _Toc325922689 h 27 HYPERLINK l _Toc325922690 6.1 测试方法 PAGEREF _Toc325922690 h 27 HYPERLINK l _Toc325922691 6.1.1 静态测试与动态测试相结合 PAGEREF _Toc3259

18、22691 h 27 HYPERLINK l _Toc325922692 6.1.2 压力测试 PAGEREF _Toc325922692 h 27 HYPERLINK l _Toc325922693 6.2 测试结果 PAGEREF _Toc325922693 h 27 HYPERLINK l _Toc325922694 7 总结与展望 PAGEREF _Toc325922694 h 28 HYPERLINK l _Toc325922695 7.1 总结 PAGEREF _Toc325922695 h 28 HYPERLINK l _Toc325922696 7.2 展望 PAGEREF _

19、Toc325922696 h 28 HYPERLINK l _Toc325922697 结束语 PAGEREF _Toc325922697 h 30 HYPERLINK l _Toc325922698 参考文献 PAGEREF _Toc325922698 h 31 HYPERLINK l _Toc325922699 致谢 PAGEREF _Toc325922699 h 32 PAGE 33绪论自从人类有了语言之后,人与人之间的交流更为方便。二次大战以后科学技术的迅猛发展,给我们的生活带来了巨大的变化。人与人之间的交流不在局限于面对面或纸上的书信交流,而是更加多元化。当今世界即时聊天越来越受到人

20、们的青睐。本课题研究的是一种基于Internet网络以及其他有线、无线网络的实时通信方式即时聊天系统。即时通信(Instant Message)是互联网应用的一大热点,通过通信系统建立网络虚拟社区,为用户提供实时有效的沟通手段。本课题在实施的过程使用的Java语言。课题选择的背景计算机、电信网络快速发展的今天,即时通讯方式日益受到人们的青睐。即时通讯工具不仅解放了人们交流的距离,而且使得交流的方式更加的多元化。即时聊天工具发展的历史并不久远,但凭借计算机和网络之间的相互结合。人们可以通过计算机的电信网络实现视频、音频同步的交流。丰富了人们的联系方式。1996年11月,四位以色列籍年轻人成立的一

21、家名为Mirabilis的小公司推出了第一个即时通信软件ICQ,取意为“I seek you”,这是当时出现一款较为流行的网络IM聊天工具。在接下来的几年里,IM凭借一种更直接、更简单、更便捷的方式改变了整个网络的交流方式,在编码、字符、图片堆积Internet中构建了一条充满温情的沟通渠道。随后的几年伴随着互联网的飞速发展,国内外即时聊天系统也在不断的发展。相继有许多的聊天系统被人们所接受和认可。比如中国腾讯的QQ,微软的MSN,新浪的UC,搜狐的搜Q,但还是QQ最为成功。目前互联网上即时聊天系统种类众多,功能也较为齐全。如果企业或者单位内部使用这些比较成熟的即时聊天系统,由于聊天对象与内容

22、部可控性,这样企业可能会降低工作效率。该即时聊天通讯系统将自己的服务器端安装在企业内,并且由企业内部的人员来进行管理,可以很好的解决这个问题。并且该系统是定位于企业内部网络,解决企业或单位的沟通与系统问题,提高工作效率。企业内部的工作人员可利用该通讯系统随时随地发送文字消息、进行群聊、消息群发等。系统包括客户端程序和服务器端程序,支持局域网和Intent。企业内部员工之间可以在内部网覆盖的任何地方、时间即时交流,真正的实现企业内部协同工作。大大提高企业的办公效率。国内外现状及发展趋势目前,即时聊天系统收到人们的普遍欢迎,互联网上也推出不少相关的应用程序。目前在互联网上受欢迎的即时通讯软件包括Q

23、Q、MSN、AOL Instant Messenger、Yahoo! Messenger、NET Messenger Service、Jabber、ICQ等。通常IM服务会在使用者通话清单(类似电话簿)上的某人连上IM时发出信息通知使用者,使用者便可据此与此人透过Internet或网络开始进行实时的IM文字通讯。除了文字外,在频宽充足的前提下,大部份IM服务事实上也提供了视讯通讯的能力。实时传讯与电子邮件最大的不同在于不用等候,不需要每隔两分钟就按一次“传送与接收”,只要两个人都在在线,就能像多媒体电话一样,传送文字、档案、声音、影像给对方,只要有网络,无论对方在天涯海角或是双方隔得多远都没有

24、距离。“中国即时通讯市场将发生翻天覆地的变化,当然并不是说谁可以把QQ干掉,QQ依然会占领很大的市场份额,但是绝对不是像现在这样的一家独大的垄断性份额。我认为这个时间很快就会来临,或许就在今年底或明年。”前雅虎中国总裁周鸿祎曾如此充满期望。2005年Ebay以数亿美金的代价收购了做语音即时通讯软件的Skype,此时Skype并没有实现盈利。之前,搜索引擎巨Google也开发了自己的语音即时通讯聊天工具Google Talk。国际巨头的动作预示着,即时通讯公司正在向多元化经营和通讯语音的方向发展。同样的变化也发生在中国,只不过故事的版本有了变化。2004年微软的MSN进中国时,签下了数家做内容的

25、网站进行门户式的扩张;而腾讯则公开宣布要靠即时通讯多年积攒的用户数做基础,向门户和C2C电子商务方向进军。新浪的UC则在向视频增值服务的方向向前发展。即时通讯产业的明天同样充满了变数。随着互联网的普及和带宽技术的发展,即时聊天领域竞争依然十分激烈。虽然互联网的应用不断的推陈出新,像微博、社交网站的出现,在一定程度上对即时聊天有一些冲击,但是完全替代即时聊天是不可能的。人们渴望在现在即时聊天的基础上,即时聊天能不断的完善与满足用户的需要,使之更为出色和富有竞争力。本文的主要工作本文在充分了解时下流行的即时聊天系统的基础上,针对企业对聊天的可控性的要求,在设计上采用的是面向对象的组建式设计方法,详

26、细介绍系统的分析与设计。本文则主要介绍,用户之间的信息同步,用户之间可以进行信息交互、沟通。使用即时通讯时,要保证当前客户端计算机登陆指定服务器,在这里可以进行好友的添加,并与对方进行沟通,发送信息、文件等。本章小结本章简要描述该课题的选题背景、即时通讯系统的国内外发展状况与趋势、论文的主要内容。涉及的相关技术与协议为了保证课题能正常实施,先来分析一下课题所需要的相关技术和协议。Java语言技术基础经过认真的讨论分析,综合各种计算机高级语言的特征和适应范围,最终决定选择纯面向对象的Java语言来完成毕业论文的设计,下面就技术可行性方面,对Java语言作简要介绍。Java的历史要追溯到1991年

27、,由Patrick Naughton及其伙伴James Gosling 带领SUN公司的工程师小组想要设计一种小型的计算机语言,主要用于像有线电视转换盒这类的消费设备。由于这些消费设备的处理能力和内存都很有限,所以语言必须非常小且能够生成非常紧凑的代码。另外,由于不同的厂商会选择不同的中央处理器,因此这种语言的关键是不能与任何特定的体系结构捆绑在一起。这种要求代码小、紧凑、且平台无关,是Java语言设计的初衷。1996年初,SUN公司发布了Java第一版本,就引起了人们的极大兴趣。虽然在在前两个版本中有很大的局限性,在随后的几个版本的不断完善后,现在Java语言在业界起着举足轻重的作用。Jav

28、a是它以C+为基础,但是却是一个全新的软件开发语言。Java语言具有的简单、面向对象等11大特色 REF _Ref323757239 r 1。Java语言在开发和执行过程中的特点Java是解释型的高级编程语言 REF _Ref323758230 r 2,所以Java程序的开发通常需要经过编写源程序、编译生成字节码和运行三个过程。这里要提到,Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码字节码。这一编译过程同C/C+的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中

29、,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。Java的另外一个比较重要的概念就是Java虚拟机:Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。运行JVM字节码的工作是由解释器来完成的。解释执行过程分代码的

30、装入、代码的校验和代码的执行三部进行。JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。Java语言本身的特点Java是一种跨平台,适合于分布式计算环境的面向对象编程语言 REF _Ref323757239 r 1。具体来说,它具有如下特性:简单性、面向对象、网络性、解释型、健壮性、安全性、体系结构独立、可移植性、高性能、多线程、动态性等。下面将重点介绍Java语言的简单性、面向对

31、象、体结构中立性、可移植性、多线程、可靠和安全等特性。简单性Java语法就是C+语法的一个“纯净”版本。Java剔除了C+中许多很少使用、难以理解、易混淆的特性。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作重载符、虚基类等等。简单的另外一个方面是小,可支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为40kb,再加上基础的标准类库和对线程的支持大约需要增加175kb。面向对象性面向对象程序设计是当今主流的程序设计范型。面向对象的程序设计是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。其实现实世界模型的自然延伸。现实世界中任何实体都可以看作

32、是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。它将重点放在数据(即对象)和对象的接口上。面向对象始终关注的是所要抽象的对象,然后才是实现的方法。在过去的30年里,面向对象已经证明了自身的价值,一种现代的程序设计技术简直让人难以置信。Java的面向对象特性与C+旗鼓相当。Java与C+的主要不同在于多继承,在Java中,取而代之是简单的接口概念,以及Java的元类(metaclass)模型。封装、继承、多态是面向对象语言的三大特性

33、。Java作为面向对象编程语言很好的支持这三种特性。现实世界的对象均有属性和行为,可以映射到计算机程序上,属性表示对象的数据,行为表示对象的方法。封装形式看只不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象的数据称为实例域(instance fields),操纵数据的过程称为方(method)。继承让人们可以在已存在类的基础上构造一个新类。继承已存在的类就是复用这些类的方法和域。在此基础上,可以添加一些新的方法和域,以满足新的需求。这是Java程序设计中的一项核心技术。多态是一种运行期行为,不是编译期的行为,是指一个对象变量可以引用多种实际类型的现象。在运行时能自动

34、地选择调用哪个方法的现象。体系机构中立性编译器会为Java代码生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,就可以在许多处理器上运行。Java编译器通过生成与特定平台计算机无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以迅速地翻译成本地机器的代码。解释字节码是依赖于虚拟机的,虚拟机可以检测指令序列,以增强期安全性。有些程序还以快速地生成字节码,并动态增强所运行程序的处理能力。可移植性与C和C+不同,Java规范没有“依赖具体实现”的地方。基本的数据类型的大小以及有关的算法都做了明确的说明。例如,Java中的i

35、nt永远为32位的整数,而在C/C+中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。惟一的限制只是int类型的大小不能低于short int,并且不能高于long int。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行的存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。多线程通常,一个程序可以同时执行多个任务时,每个任务称为一个线程。线程可以带来更好的交互响应和实时行为。与进程相比较线程是轻量级的进程,创建、撤销一个线程比启动新进程的开销要小的多。Java处理多线程非常便捷。只要操作系

36、统支持,Java中的线程就可以利用多个处理器。Java在两方面支持多线程。一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。Java的线程还包括一组同步原语。这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率。必须注意地是,Java的多线程支持在一定程度上受运行时支持平台的限制。例如,如果操作系统本身不支持多线程,Java的

37、多线程特性可能就表现不出来。可靠性与安全性Java的设计目标之一在于使得Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的问题检测、后期动态的检测,并消除了有出错倾向的状态。Java和C+最大的不同在于Java采用指针模型可以消除重写内存和损坏数据的可能性。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。Java是一种没有显式指针的语言,但具备指针的能力,如链表。Java是绝对安全的,它能够永远存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄露。Java适用于网络/分布式环境。为了达到这个目的,在安全方面投入了很大的精力。使用Java可以

38、构建防病毒、防纂改的系统。Java能够防范各种袭击,其中包括:运行时的堆栈溢出。如蠕虫等病毒常用的袭击手段;在自己的内存空间之外破坏内存;未经授权的读写文件。Java还有数字签名类的概念。通过数字签名类,可以确定类的作者。如果信任这个类的作者,这个类就可以在机器上拥有更多的权限。Java与Hibernate整合使用访问数据库ORM数据库操作技术ORM是一种在关系型数据库上构造面向对象数据存储的技术,这种技术又被称为伪面向对象数据库技术。该技术提供一个软件框架,透明的实现对象保存与维护。在底层上,对象保存时,对象能拆分成不同的数据记录,并规则地保存在关系型数据库中;而数据的检索式,再实现由关系型

39、数据库中的记录到特定对象的装配工作。ORM模块作用示意图如2-1所示。图21伪面向对象数据库系统结构示意图RDB为关系型数据库,DBMS是关系型数据库管理系统,两者整体上构成传统上的关系数据库系统 REF _Ref325900592 r 3。ORM是对关系映射模块,该模块和传统的关系型数据库系统作为整体形成伪面向对象数据库系统。Hibernate简介本系统采用了Hibernate的ORM模块,通过该模块可以为多数主流关系型数据库,如Oracle、MySQL、SQL Server等,提供方便的面向对象操作方法。此模块只需要打包开发的应用软件中,不需要在数据库上安装,应用软件在运行过程中会使用该模

40、块操作数据库。 Hibernate本质上也是一种基于JDBC的数据库操作技术。它通过JDBC的封装,屏蔽了JDBC API 的操作细节,提供一种方便的面向对象数据库操作接口。它实现了面向对象操作与面向关系操作的转变,将应用软件提出的面向对象数据库操作请求,转变为关系型的SQL语句,然后对数据库进行操作,并将数据库返回结果封装成适当的对象,返回作为数据使用者的应用软件。图2-2演示了Hibernate的操作原理。图22 Hibernate核心作用示意图Hibernate的核心作用有两个方面:首先将面向对象的相应概念对应翻译成关系型数据库中的概念,例如将对象翻译成表的记录:将类翻译成数据库中的表;

41、将类和类间的关联关系翻译成为表和表间的关系。其次Hibernate承担着将面向对象操作翻译成SQL语句为标准的关系型操作。XMLXML是可扩展标记语言,一种非常有用的描述结构化信息的技术 REF _Ref325901157 r 4。XML工具使处理和转化信息十分容易。只需要在特定的领域标准和代码库就能有效地使用XML。XML与Java配合的相当好。从20世纪90年代末以来,IBM ,Apache和其他许多公司一直在帮助开发用于XML处理的高质量Java库。Sun公司从JDK SE 1.4 开始将大部分重要的代码库都整合到了Java平台的标准版中。此外也有一些组织或个人开发出了一些第三方类库,使

42、XML的解析和创建都十分的简单易行。比如Jdom、dom4j等,都是非常实用的类库,给处理XML带来了很大的帮助。XML文件的格式非常直观,它与HTML文件非常相似。XML和HTML是标准通用语言的衍生语言。只不过XML语言对语法的要求给位严格,并且其中的元素可以自己定义非常的灵活与方便。要处理XML文档,就要先解析(parse)它。解析器一种程序,它读入一个文件,确认这个文件具有正确的格式,然后将其分解称为各种元素,是的程序员能够得到这些元素。Java库提供了两种XML解析器:像文档对象模型(DOM)解析器这样的树形解析器(tree parser),它们将读入的XML文档转换成为树结构。像用

43、于XML的简单API(Simple API for XML,SAX)解析器这样的流机制解析器,它们在读入XML文档时生成相应的事件。除了Java库中提供的解析器,还有现在比较流行的第三方解析器,如jdom、dom4j等,这些类库能让程序员以更加面向对象的方式去解析XML文档,程序员只要知道XML中相应的格式,就可以解析出文档的内容,同样也是程序员创建XML中的元素更加的方便与快捷,大大提高了开发效率。相关的协议介绍TCP/IP协议TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport l

44、ayer)通信协议 REF _Ref325901325 r 5。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。TCP作用在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的运输层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的T

45、CP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算和校验。首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,它是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法

46、),该算法主要包括三个主要部分:加性增、乘性减、慢启动对超时事件做出反应。UDP协议(用户数据报协议)UDP协议简介UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务 REF _Ref325901325 r 5。它是IETF RFC 768是UDP的正式规范。用户数据包协议UDP是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。简介UDP协议的全

47、称是用户数据包协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于

48、IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。使用UDP在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊

49、天用的ICQ和QQ就是使用的UDP协议。UDP报头UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:源端口号目标端口号数据报长度校验值UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。因为聊天期间一般对数据的可靠性要求不高,所以在这里用UDP协议。UDP协议在Java编程中的应用Java中用于无连接的数据报通信的类有两个:DatagramPacket类和DatagramSocket类 REF _Ref325901485 r 6。其中DatagramPacket类用于读取数据等信息,Datagr

50、amSocket类用于实现数据报的发送和接受过程。现在主要介绍一下DatagramPacket类与DatagramSocket类。DatagramPacket类的构造函数有两个:public DatagramPacket(byte buf,int length);public DatagramPacket(byte buf,int length,InetAddress addr,int port);第一个是用来创建接收数据报的对象,它的两个参数分别代表接收数据报的数据部分的字节数组和所要接收的数据报的长度;DatagramPacket类的第二个构造函数用来创建发送给远程系统的数据报,它的第一个

51、参数buf是存放欲发送的编码后的报文的字节数组,第二个参数length指明字节数组的长度,即数据报的18大小,第三个参数指定所发送的数据报的目的地,其接收者的IP地址,最后一个参数port标志本数据报发送到目标主机的哪个端口。DatagramSocket类有三个构造函数:public DatagramSocket ();public DatagramSocket(int port);public DatagramSocket(int port ,InetAddress localAddr);DatagramSocket类有三个构造函数,第一个用于创建一个数据报Socket并将它连接在本地主机的

52、任何一个可用的端口上;第二个构造函数在指定的端口处创建一个数据报Socket对象;第三个构造函数用于在多IP地址主机上创建数据报Socket,它的第二个参数具体指明使用哪个IP地址。这三个构造函数都抛出IOException异常,用来控制在创建DatagramSocket类对象时可能产生的异常情况,如下:public synchronized void receive(DatagramPacket p)throws IOException;public void send(DatagramPacket p)throws IOException。receive()和send()是Datagram

53、Socket类中数据报套接字用来实现数据报传送和接收的两个重要方法。其中receive()方法将使程序的线程一直处于阻塞状态,直至从当前Socket中接收到数据报文、发送者等信息,这些接收到的信息将存储在receive()方法的参数DatagramPacket对象p的存储机构中。需要注意的是由于数据报是不可靠的数据通信方式,receive()方法不一定能读到数据,为防止线程死掉,应该设置超时参数(timeout)。Send()方法将其参数DatagramPacket对象p中包含的数据报文发送到所指定的IP地址主机的指定端口。这两个方法都可能产生输入/输出异常,所以都抛出IOException异

54、常。然后,再介绍一下UDP的编程实现数据报的发送过程可简单描述为如下的步骤:创建DatagramPacket对象,使其中包含如下的信息:要发送的数据;数据报分组长度;发送目的地的主机IP地址和目的端口号;在指定的或可用的本机端口创建DatagramSocket对象;调用该DatagramSocket的send()方法,以DatagramPacket对象为参数发送数据报。数据报的发送过程可简单表述为如下的步骤:创建一个用于接收数据报的DatagramPacket对象,其中包含空白数据缓冲区和指定数据报分组长度;在指定的或可用的本机端口创建DatagramSocket对象;调用DatagramSo

55、cket对象的receive()方法,以DatagramPacket对象为参数接收数据报,接收到的信息有:收到的数据报文内容;发送端的主机IP址;发送端主机的发送端口号。TCP协议与UDP协议的比较分析可知,TCP协议比UDP协议复杂得多,现在从协议的应用范围说明他们的使用范围。TCP协议与UDP协议特点比较TCP协议是一种面向连接的协议,而UDP协议是无连接的协议。这其中的区别在于:第一,TCP协议是以连接作为协议数据的最终目标的。UDP协议则是以目标端口作为协议数据的最终目标。因此,TCP的协议端口是可以复用的,UDP协议的端口在同一时间则只能为一个应用程序所用。第二,一个连接是由两个端点

56、构成的。要使用TCP进行通信必须先在通信双方之间建立连接,连接的两端必须就连接的一些问题进行协商(如最大数据段长度、窗口大小、初始序列号等),并为该连接分配一定的资源(缓冲区)。UDP协议则不需要这个过程,可以直接发送和接受数据。TCP协议提供的是可靠的传输服务,而UDP协议提供的是不可靠的服务。使用不可靠的服务进行数据传输时,数据可能会丢失、失序、重复等。而可靠的服务服务能保证发送方发送数据能原样到达接收方。TCP协议提供的是面向字节流的服务。应用程序只需要将要传输的数据以字节流的形式提交给TCP协议,在连接的另一端,数据以同样的字节流顺序出现在接收程序中,而UDP协议的传输单位是数据块,一

57、个数据块只能封装在一个UDP数据包中。TCP协议与UDP协议应用的比较根据上面的分析,现在来看看两种协议适合于哪些场合。因为TCP协议提供了可靠的面向字节流的服务,而且有一套的高效的机制保证数据的高效传输,所以对于有大量数据需要进行可靠传输的应用是很适合的,因为应用程序不需要关心如何保证数据传输的可靠性,如何进行超时重发等。这种应用的典型例子就是文件传输协议(FTP)。由于TCP协议要先建立连接之后才能进行通信,而连接的建立过程需要一定的时间。所以如果应用程序只有少量数据需要传输则不适合使用TCP协议,因为连接建立的开销大于其方便性的优点。但对于虽然数据量少但需要时间较长且可靠性要求高的应用T

58、CP也是比较适合的。Telnet就是这种应用的一个例子。实时应用不管数据量大小,不管对可靠性要求高低都不适合使用TCP协议,因为TCP协议对数据的传输有相应的程序,只有前面的传输成功才会开始后面的数据传送传送。另外,由于TCP协议是面向连接的,一个连接必须且只能有两个端点。所以对于多个实体间的多播式的应用无法使用TCP协议进行通信,因为对于n个实体间的通信需要n(n-1)/2个连接。对于不适合使用TCP协议的应用就只能使用UDP协议了,使用UDP协议进行通信时应用程序必须自己处理下列问题。应用程序必须自己提供机制来保证可靠性。应用程序必须有自己的超时重发机制、数据失序的处理、流量控制等。当然对

59、于一些可靠性要求不高的应用可以不用这些机制,但通常都需要区分数据的先后关系。应用程序必须机自己处理大块数据的分割,以让其能封装在一个UDP数据包中。在接收方还必须再将再次将分割的数据进行重组。综上,可以知道,在设计基于网络的即时通讯系统时,比较适合使用UDP协议。基于Socket的编程现在来介绍一下Socket编程。从概念上理解,Socket是网络编程中最常见的C/S模式,也是即时通讯工作的基础。以该模式编程时,服务器端有一个进程或多个进程在指定的端口等待客户来连接,如果一旦连接成功,就按照设计的数据交换方法和格式进行数据传输。客户端向服务器端提出连接请求,连接之后进行通信。Socket是一种

60、用于表达两台机器之间连接终端的软件抽象。对于一个给定的连接,在每台计算机上都有一个Socket,可以想象一条虚拟的电缆工作在两台机器之间,电缆插在两台机器的Socket上。当然,物理硬件和两台机器之间的“电缆”这些连接装置都是未知的、抽象的,所有目的就是为了不必了解更多的细节。简单说,一台计算机上的Socket同另外一台计算机通话创建一个通信信道,程序员可以用这个信道在两台计算机之间发送数据。Java Socket的类型有两种,在编写通讯工具时均有它们的用处。TCP Socket:由Socket类实现。UDP Socket:由DatagramSocket类实现。TCP和UDP扮演着同样的角色,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论