收藏 分享(赏)

毕业设计论文-点对点通讯软件的设计与开发(源代码).doc

上传人:QQ153893706 文档编号:2292787 上传时间:2018-09-09 格式:DOC 页数:34 大小:385.50KB
下载 相关 举报
毕业设计论文-点对点通讯软件的设计与开发(源代码).doc_第1页
第1页 / 共34页
毕业设计论文-点对点通讯软件的设计与开发(源代码).doc_第2页
第2页 / 共34页
毕业设计论文-点对点通讯软件的设计与开发(源代码).doc_第3页
第3页 / 共34页
毕业设计论文-点对点通讯软件的设计与开发(源代码).doc_第4页
第4页 / 共34页
毕业设计论文-点对点通讯软件的设计与开发(源代码).doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、1河北农业大学本科毕业设计设计题目 点对点通讯软件的设计与开发 学生姓名 学号 学院 现代科技学院 专业班级 计算机1002班 指导老师 指导老师职称 讲师 二一四 年 六 月 一 日2摘 要随着计算机网络技术的快速发展,人们的交流方式越来越多,传统的通信方式在速度和可靠性方面已经很难满足人们的需要,即时通信系统已经越来越受欢迎。同时,即时通信系统对现代企业也有着重大意义,它为诸企业开拓了网络应用的新领域。自从它诞生以来,以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已经成为网络生活中不可或缺的一部分。本着学以致用的原则,本人开发了这套多用户网络聊天室系统,以满足网络用户的通讯需求。该系

2、统具有操作简单、界面友好、功能丰富等优点。它采用Eclipse为基本开发环境,用java语言进行编写,开发中充分使用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程、JDBC数据库编程技术等。本论文就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深入细致的讨论。关键词:聊天室 Socket Java JDBC 网络编程 全套源程序加 1538937063AbstractAlong with the rapid development of computer network technology, the wa

3、ys of peoples communication are increased rapidly. The traditional means of communication has become very difficult to meet peoples needs in speed and reliability. Instant communication system has become the new darlings of the people. Meanwhile, Instant communication system is also of great importa

4、nce to the modern enterprises. It exploits a new domain for the enterprise. It has been enjoyed by the majority of individual users for its real-time interaction between the advantages of low rates since its bored. It has been an integral part of network life. In apply of the principle of practice,

5、I developed the set of multi-point chatting system to meet the network users needs of communication. This system has some characteristic as follows : simplify operation, friendly interface, single function. The basic development environment with Eclipse, written with java language, development of co

6、mputer network programming using the basic theory of knowledge, such as TCP / IP protocol, client/server mode (Client/Server mode), network programming design method.This paper introduced the process of the systems development in detail, and deeply discussed the principle of system、collectivity desi

7、gn.Keywords: Chatting room SocketJava JDBC Network programming4目 录1.前言 61.1 开发背景和意义 .61.2 可行性分析 .61.2.1 技术可行性 61.2.2 经济可行性 81.2.3 操作可行性 82.相关原理技术简介 92.1 JAVA 语言简介 .92.2 JDBC 介绍 .92.3 SQL SERVER 简介 103.系统需求分析 133.1 业务需求 .133.2 功能需求 .133.3 可靠性需求 .143.4 性能需求 .144.多点聊天通信原理 154.1.套接字通信 154.1.1 客户端套接字 164

8、.1.2 服务器端套接字 174.2 数据报通信 .184.3 无连接的客户/服务器程序工作流程 204.4 多线程编程 .215.总体设计 235.1 系统通信模型与拓扑结构设计 .235.1.1 即时通讯系统的一般模型 235.1.2 即时通讯系统服务的拓扑模型 245.2 数据库设计 .245.2.1 概念结构设计(ER) .255.2.2 逻辑结构设计 255.3 功能设计 .265.2.1 服务器端功能设计 265.2.2 客户端功能设计 265.3 界面设计 .285.3.1 服务器端界面设计 285.3.2 客户器端界面设计 306.详细设计 336.1 服务器端详细设计 336

9、.2 客户端详细设计 .336.2.1 功能模块的实现 336.2.2 用户登录功能的实现 3456.2.3 聊天记录保存 34结论 .35致谢 .36参考文献 .3761.前言1.1 开发背景和意义随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式已经难以满足人们的交流的需求了,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。同时,即时通信系统对现代企业也有着重大意义,它能实现快速人际交流、数据共享,从而提高效率和生产力。实时通信为诸企业开拓了网络应用的新领域。自从它诞生以来,以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已经成为网络生活中不可或缺

10、的一部分。越来越多的企业已开始认识到即时通信工具能够带来极高的生产力,借助它的应用,来提高业务协同性及反馈的敏感度和快捷度。因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了QQ、UC 等聊天工具,然而QQ、UC 等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯的专用工具。目前,用于实现单一的即时通讯的软件实在太少,为此,我们决定开发一个专用于实现多台计算机之间即时通讯的软件,以方便多台计算机之间信息的快速交流。本系统基于C/S 模式实现,采用Java 语言编写。所有用户都通过服务器端中转

11、消息,这也是现有大多数聊天系统所采用的模式。本系统真正地实现了多用户聊天的功能,可以在多点间快速传递信息。同时,它体积小,功能单一,界面简洁美观,容易上手,只要简单阅读服务器端和客户端的帮助文档即可完全掌握它的使用方法。是网络聊天,特别是局域网聊天不可多得的好帮手。1.2 可行性分析本节从技术、经济和操作三个方面对系统的可行性做出了分析。确定了系统是否值得实现。可行性分析是现代软件工程不可或缺的重要组成部分。对问题的可行性做详细认真的可行性研究,可以避免很多不必要的浪费,确保用最小的代价在尽可能短的时间内确定问题是否能够解决。1.2.1 技术可行性经过对系统需求的认真分析,综合各种计算机高级语

12、言的特性和适应范围,最终决定选择纯面向对象的Java 语言来完成我的毕业设计,Java 是Sun Microsystem 公司的James Gosling 开发的编程语言。Sun 公司的口号就是“网络就是计算机“,Java 能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。使用Java,我们可以相对轻松的编写一个有条理的网络程序。7下面就技术可行性方面,对Java 语言作一简要介绍。Java 是一种简单的、面向对象的、健壮的、安全的、解释的、与平台无关的、多线程、动态的计算机语言。Java 的开发环境有不同的版本,Sun 公司相继的推出了J

13、2ME、J2SE、J2EE 三大平台,尤其是J2SE 是Java 2 标准平台,广泛用于工作站、PC 机,被称为“互联网上的世界语”。这些为我们开发系统提供了强大的平台支持。而且Java 在互联网方面具有得天独厚的优势,也是最吸引我们的地方之一。Java 最初是为家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java 摒弃了C+中容易引发程序错误的一些特性,如指针、结构以及内存管理等。Java提供了丰富的库类,可以帮助我们很方便的开发Java 程序。Java 致力于检查程序在编译和运行时的错误。Java 也是一种强类型的语言,其类型检查比C+还要严格,类型检查帮助我们检查出许多开发

14、早期出现的错误。Java 自己负责内存管理,提供了垃圾回收机制,有效的避免了C+中最头疼的内存泄露问题。Java 的安全性可以从两个方面得到保证。一方面,在Java 语言里删除了指针和释放内存等C+功能,避免了非法内存操作;另一方面,通过Java 的安全体系架构来确保Java 代码的安全性。Java 作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java 运行系统的机器都能执行这种中间代码。Java 源程序被编译成一种与机器无关的字节码格式,在Java 虚拟机上运行。Java 语言的一个重要的特性就是在语言级别支持多线程的程序设计,使得在编写多线程程序时十分的简单。JVM

15、 很好的管理多个线程同时运行过程中了资源共享问题。Java 的动态性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类。Java 编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。这样,对类中的变量和方法进行更新时就不至于影响存的代码。1.2.2 经济可行性在Java 诞生之初,Sun 及其明智的制定了一个开放的发展策略,为Java 的发展创造了一个良好的环境,可以说正是这个策略造就今天繁荣兴旺的局面,也因此Java 与开源结下了不解之缘。Java 世界中,开

16、源组织与非盈利机构发挥到了极致,许多出色的工具都出自它们之手。比如JUnit、Cactus、Tomcat、Struts、JBoss、Eclipse、ANT、Xerces、Hibernate、Axis、AspectJ 等等,许多工具还会出现在我们的咖啡馆中,扮演重要的角色。Java 世界中,8便宜无好货绝对不成立,这些工具拥有足以和商业软件媲美的质量,很多商业IDE 还集成了这些工具。“开源,不仅仅是Java 语言,还包括开发工具和框架,相对廉价的开发成本”。这就使得个人使用Java 作为开发平台成为可能。1.2.3 操作可行性与C、C+、Visual Basic、Delphi 等计算机语言不同

17、,Java 技术特指应用,而不是Java 语言。Java 技术广泛应用于各种设备,为你提供各种工具、信息以及好玩的游戏。Java 为我们提供了可视化的图形API,基于此我们就能开发良好的GUI,为用户提供方便的操作环境。同时,Java 丰富的类库资源,使得我们在设计的时候可以通过简单的继承就可以实现许多复杂的功能。Java 优越的可移植性大大提高的软件的可重用性,用Java 开发的软件,可以不经过任何的更改就移植到支持Java 虚拟机的操作系统上,真正的实现了“一次编译,到处运行”。92.相关原理技术简介2.1 Java 语言简介Java技术是由美国Sun公司倡导和推出的,是一种简单易用、完全

18、面向对象、具有平台无关性且安全可靠的主要面向Internet的开发工具。Java技术包括Java语言和Java MediaAPIs、SecurityAPIs、ManagementAPIs、Java Applet、Java RMI、Java Beans、Java OS、Java Servlet、JDBC、JNDI、Enterprise JavaBeans等。随着Java Servlet的出现和JSP的渐渐成熟,让Java正式的走向了Web开发技术的舞台。Java以其强大的移植能力,多线程处理和网络处理能力已成为研究人员,开发人员瞩目的焦点,它与Web技术的有机结合尤其适宜进行网络计算和动态多媒体

19、信息的开发处理。Java技术带来的是一场革命,它是第一个真正独立于平台的语言,基于Java语言开发的软件可以实现“一次设计,到处运行”,即Java程序不经改变即可部署到任何运行Java虚拟机的计算机结构和操作系统,使得整个Web世界发生了翻天覆地的变化。目前,Sun公司已经将Java技术分成了4大类:服务器使用的企业版(J2EE)、台式电脑使用的标准版(J2SE)、小型设备使用的微型版(J2ME)以及在欧洲销售的手机中使用的具有智能卡和标识标签功能的Java Card。2.2 JDBC 介绍JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQ

20、L语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将

21、Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提10供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。 Ja

22、va 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。 JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的网页,而该 applet 使用的信息可能来自远程数据库企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编程语

23、言,对从 Java 中便捷地访问数据库的要求也在日益增加。 MIS 管理员们都喜欢 Java 和 JDBC 的结合,因为它使信息传播变得容易和经济。企业可继续使用它们安装好的数据库,并能便捷地存取信息,即使这些信息是储存在不同数据库管理系统上。新程序的开发期很短。安装和版本控制将大为简化。程序员可只编写一遍应用程序或只更新一次,然后将它放到服务器上,随后任何人就都可得到最新版本的应用程序。对于商务上的销售信息服务, Java 和JDBC 可为外部客户提供获取信息更新的更好方法。2.3 SQL Server 简介本次使用SQL Server 2000作为后台数据库,SQL Server是面向中小

24、型企业应用的数据库软件,它对用户十分友好,使用起来非常方便。其自带的企业管理器和查询分析器为开发者管理和使用数据库提供了极大便利。而且,相对于ACCESS数据库来说,SQL Server的安全性更高。1. SQL Server是一个功能全面的数据库SQL Server是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。2. SQL Server数据平台为各种规模的组织提供了以下好处:(1) 充分利用数据资产。 除了为业务线和分

25、析应用程序提供一个安全可靠的数据库之外,SQL Server也使用户能够通过嵌入的功能(如报表、分析和数据挖掘等)从他们的数据中得到更多的价值。11您可以充分利用其强大功能性和灵活性将数据传递到组织的每个角落,而成本仅为其他一些系统的一部分。(2) 提高生产效率。 通过全面的 BI 功能以及熟悉的 Microsoft Office 系统之类的工具集成,SQL Server为组织内信息工作者提供关键的、及时的业务信息以满足他们特定的需要。SQL Server的目标是将 BI 扩展到组织内的所有用户,并且最终帮助组织内所有级别的用户能够基于他们最有价值的资产数据来做出更好的业务决策。(3) 减少

26、IT 复杂性。SQL Server简化了开发、部署和管理业务线和分析应用程序的复杂度,它为开发人员提供了一个灵活的开发环境,为数据库管理人员提供了集成的自动管理工具。降低总体拥有成本 (TCO)。SQL Server中集成的方法和对产品易用性和部署上的关注提供了行业上最低的规划、实现和维护成本,使数据库投资能快速得到回报。3. SQL Server可以与各种软件开发无缝集成SQL Server数据引擎是企业数据管理解决方案的核心。此外 SQL Server结合了分析、报表、集成和通知功能。这使企业可以构建和部署经济有效的 BI 解决方案,帮助团队通过记分卡、Dashboard、Web serv

27、ices 和移动设备将数据应用推向业务的各个领域。此外,借助SQL Server的JDBC驱动包,可以很容易地在Eclipse开发工具中编写基于SQL Server数据库的应用程序。123.系统需求分析对软件需求的深入理解是软件工作者获得成功的前提条件,只有真正满足用户需求的软件才是有用的软件。系统需求分析将要回答的问题是:用户需要什么样的系统,系统必须做些什么等问题。只有锁定目标,才能更有效率,更正确的工作。3.1 业务需求1. 与聊天室成员一起聊天。2. 可以与聊天室成员私聊。3. 可以改变聊天内容风格。4. 用户注册(含头像)、登录。5. 服务器监控聊天内容。6. 服务器过滤非法内容。7

28、. 服务器发送通知。8. 服务器踢人。9. 保存服务器日志。10.保存用户聊天信息。3.2 功能需求聊天室软件共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登陆到服务器才可以实现正常聊天功能。1)服务器端的主要功能如下1.处理用户注册2.处理用户登录3.处理用户发送信息4.处理用户得到信息5.处理用户退出2)客户端的主要功能如下1.用户注册界面及结果2.用户登录界面及结果3.用户发送信息界面及结果4.用户得到信息界面及结果135.用户退出界面及结果3.3 可靠性需求多点聊天系统是一个应用软件,要传送的数据必须通过传输层来完成。在传输层有两个传输协议可以使用,就

29、是UDP 协议和TCP 协议。UDP 协议是无连接的传输协议,也没有保证可靠传输的措施,就是说它不能保证传输质量。而TCP 协议是面向连接的协议,通过对传输数据的每一个字节统一编号、接收端确认、发送端超时重传、流量控制、拥塞控制等措施来保证所传输数据的可靠性。要保证多点聊天系统的通信可靠性,必须选择可靠的传输协议。本系统设计时选择了TCP 协议作为传输协议。TCP 协议在一个应用程序向另一个应用程序发送数据之前,两个进程之间必须经过三次“握手”,为后续的数据可靠传输发送一些预备数据段。TCP“连接”也不像线路交换网络中的端到端的TDM 或者FDM 电路,它不是一个虚电路,连接状态完全驻留在两个

30、终端系统中。同时,TCP 协议通过错误检测、设置计时器、在数据段头部设置顺序号和确认号字段等机制来保证TCP 数据段正确、完整、有序的传输到接收方。3.4 性能需求运行环境:Windows 2000、XP、2003、Vista或Windows 7必要环境:JDK 1.5及以上硬件环境:CPU 1GHz以上,内存1024MB以上144.多点聊天通信原理本章是整个系统实现的理论部分,将介绍多点聊天系统实现的基本原理,对套接字、数据报通信和多线程等相关技术进行了讨论。4.1.套接字通信套接字(Socket)是网络通信的基本操作单元,又称作端口,通常用来实现客户方和服务方的连接。网络上的两个程序通过一

31、个双向的通信连接实现数据的交换,在实现双向通信前链路的每一端都建立一个Socket,通过对Socket 的读/写操作实现网络的通信功能。套接字是网络通信的一个标准,它就像房中的电源插座,无论是电灯还是电脑等电器,它们只要使用220V 50HZ 的交流电压,插在电源插座上能正常工作。套接字分为以下3 种类型:(1) 流套接字这是最常用的套接字类型,TCP/IP 协议簇中的TCP 协议使用此类接口,它提供面向连接的(建立虚电路)、无差错的、发送先后顺序一致的、包长度不限和非重复的网络信包传输。(2) 数据报套接字TCP/IP 协议簇中的UDP 协议使用此类接口,它是无连接的服务,以独立的信包进行网

32、络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。(3) 原始数据报套接字提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议和提取协议较隐蔽的功能。所有Socket 通信程序的基本结构都是一样的,主要有创建Socket、打开连接到Socket 的输入流和输出流、按照一定的协议对Socket 进行读写操作、关闭Socket 这四个步骤,通过这四个步骤可以完成一般的Socket 通信。为了完成Socket 通信,包中提供了Socket 和ServerSocket 这两个类,它们分别用来表示双向连接的客户端

33、和服务端,它们的构造函数如下:Socket(InetAddress address,int port)Socket(InetAddress address,int port,Boolean stream)Socket(String host,int port)15Socket(String host,int port,Boolean stream)ServerSocket(int port)ServerSocket(int port,int count)其中,address 代表双向连接另一方的IP 地址,host 为主机名,port 为端口号,stream 用来指定是流套接字还是数据报套接字

34、,count 表示服务器能够支持的最大连接数。这里涉及到一个端口号分配的问题,TCP/IP 将端口号分为两部分,少量的作为保留端口,端口号小于256,以全局方式分配给服务进程。因此每一个标准服务器都拥有一个全局公认的端口号,即使在不同的机器上其端口号也相同。对于常见的保留端口号主要有:80 端口提供WWW 服务、23 端口提供telnet 服务、21 端口提供FTP 服务、110 端口为POP 服务等。剩余的为自由端口号,比如TCP 协议可以有123 端口,UDP 协议也可以有123 端口,这并不冲突,因为不同的协议有完全独立的软件模块。但是作为唯一通信连接的套接字之间是不能重复的。作为服务器

35、的应用程序只能同时绑定一个端口号,但是,一个服务器程序在同一端口上可以响应若干客户端请求,由于不同的客户端对应于不同的主机地址和端口号,所以这仍然具有套接字的唯一性。4.1.1 客户端套接字客户端/服务器是一种网络服务模式。在该模式中,客户机和服务器之间需要定义一套通信协议,并创建一个Socket 类,利用这个类来建立一条可靠的链接;然后,客户端/服务器再在这条连接上可靠地传输数据。客户端发出请求,服务器监听来自客户机的请求,并为客户端提供响应服务。利用Socket 类,我们可以轻松地实现网络客户端程序的编写,Socket 类的一些常用的方法汇总如下:getLocalAddress() 读取套

36、接字对象的本地地址getLocalPort() 读取套接字所使用的本地端口号getInputStream() 得到一个输入流getOutputStream() 得到一个输出流通常情况下,客户端只要能够顺序处理服务器程序的响应就可以了,因此客户端程序通常不使用多线程。4.1.2 服务器端套接字实现套接字的服务端,需要使用ServerSocket 类。ServerSocket 类是服务器程序的运行基础,它允许程序绑定一个端口号来监听客户端的请求,一旦产生客户端请求,它16将接受这一请求,同时产生一个完整的Socket 连接对象。服务器绑定的端口必须公开,以便让客户端程序知道如何连接这个服务器。同时

37、,作为服务器,它必须能够接收多个客户的请求,这就需要为服务器设置一个请求队列,如果服务器不能马上响应客户端的请求,要将这个请求放进请求队列中,等服务器将当前的请求处理完,会自动到请求队列中按照先后顺序取出请求进行处理。服务器的资源是有限的,这就导致它的最大连接数是有限的,通过ServerSocket 的构造函数可以指定这个最大连接数。如果不明徐州工程学院毕业设计(论文)确指定这个连接数,默认最大连接数为50,也就是说,客户端的请求队列最大可以容纳50 个请求,当超过这个最大连接数时,用户的请求将不再会被响应。利用SocketServer 也提供了一些方法,它们主要有:accept() 返回一个

38、“ 已连接 ”的Socket 对象getInetAddress() 得到该服务器的IP 地址getLocalPort() 得到服务器所侦听的端口号setSoTimeout() 设置服务器超时时间getSoTimeout() 得到服务器超时时间由于存在单个服务程序与多个客户程序通信的可能,所以服务程序要响应客户程序不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立,然而服务器程序和客户程序的会话可能很长,因此,为加快对客户程序连接请求的响应,典型的方法是服务器主机运行一个后台线程,这个后台线程处理服务器和客户端程序的通信。这一点和客户端的程序设计是不同的。4.2 数据报通

39、信现代网络通信主要基于TCP/IP 和UDP 协议。它们都是建立在更底层的IP 协议之上的两种通信传输协议。前者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路。进行连续的、双向的、严格保证数据正确性的传输协议;后者已数据报形式,对拆分后的数据的先后顺序不做要求的文件传输协议。虽然TCP 协议提供了有序的、可预测和可靠的信息包数据流,但是这样做的代价也很大。TCP 包含很多在拥挤的网络中处理拥塞控制的复杂算法以及信息丢失的预测,这导致了这样传输数据的方式效率很差。因此,数据报通信方式是一种可选的替代方法。多点聊天系统是以UDP 协议进行发送和接受消息的,采用C/S 模

40、型实现,使之更适合局域网的网络程序。C/S 模型主要由客户应用程序、服务器控制程序两部分组成。在网络上传输的信息,不仅限于聊天信息,还有各种控制信息,用以标识发送者用户名、IP 地址和接收者用户名、IP 17地址等信息。利用数据报传送,但受其长度限制,通常必须将数据分解为多个包,在目的地再重新组合,而这一切在传输过程中会出现大量的问题。Socket 对象封装了这一切,让程序员可以将网络连接视为另一种可以读取字节的流。数据报通信协议UDP 是一种非面向连接的提供不可靠的数据包式的数据传输协议,类似于从邮局发送信件的过程,信件只要放到邮箱就算完成任务。这说明了一旦数据报被释放给它们预定的目标,不保

41、证它们一定达到目的地,甚至不保证一定存在数据的接受者。同样,数据报被接收时,不保证它在传输过程不受损坏,不保证发送它的机器仍在等待响应。此外,数据报传输有大小限制,每个传输的数据报必须保证在64KB 之内。Java 通过 DatagramPacket 和DatagramSocket 两个类来实现UDP 协议顶层的数据报。DatagramPacket 生成的对象表示一个数据报,而DatagramSocket 是用来发送和接受数据包的类。生成DatagramPacket 对象可以用下面四个构造函数:DatagramPacket(byte data,int size)DatagramPacket(b

42、yte data,int offset, int size)DatagramPacket(byte data,int size, InetAddress ipAddress,int port)DatagramPacket(byte data,int offset, int size, InetAddress ipAddress,int port)第一个构造函数指定了接受数据的缓冲区和信息包的容量大小。它通过DatagramSocket 接收数据。第二种形式允许你在存储数据的缓冲区中指定一个偏移量。第三种形式指定一个于DatagramSocket 决定信息包将被送往何处的目标地址和端口。其中In

43、etAddress 类为表示IP 地址的类。第四种形式从数据中指定的偏移量位置开始传输数据包。对于DatagramPacket 的内部状态,可以用如下方法获得。这些方法对数据包的目标地址和端口号以及原始数据和数据长度有完全的使用权,下面列举出这些方法:InetAddress getAddress() 返回目标文件InetAddress,一般用于发送int getPort() 返回端口号byte getData() 返回包含在数据包中的字节数据。多用于在接收数据之后从数据包来检索数据int getLength() 返回包含在将从getData()方法返回的字节数组的有效数据长度。通常它与整个字节

44、数组长度不等。前面说过,DatagramSocket 类用来发送和接收数据包。因此,在用数据报方式编写客户端/ 服务器端程序时, 无论是在客户端和是服务器端, 首先需要建立DatagramSocket 对象,用来接收和发送数据报,然后使用DatagramPacket 类对象作为传输数据的载体。DatagramSocket 类常用的构造函数如下:18DatagramSocket()DatagramSocket(int port)DatagramSocket(int port,InetAddress ipAddress)通常,DatagramSocket 接受数据报要用receive(Datagr

45、amPacket p)方法,而发送数据报则使用send(DatagramPacket p)方法,这两个方法是DatagramPacket 十分常见的方法。要发送一个数据报,首先创建一个DatagramPacket,指定要发送的数据、数据的长度、数据要发送至哪个主机及该主机的哪个端口,然后再用DatagramSocket 的send()方法发送数据包;要接收一个数据报,首先必须创建一个在本地主机的特定端口上侦听的DatagramSocket,此套接字只能接受发送至特定端口上的数据包。在Windos 操作系统中,已经为网络通信提供了Winsock.dll 动态链接库,即API 函数。通过Socke

46、t,可以调用这些API 函数,从而实现网络通信。寻呼系统在通信时可以使用UDP 协议,也可以使用TCP 协议,本章将分别介绍利用UDP 协议和TCP 协议的通信原理。4.3 无连接的客户/服务器程序工作流程在Windos 操作系统中,已经为网络通信提供了Winsock.dll 动态链接库,即API 函数。通过Socket,可以调用这些API 函数,从而实现网络通信。多鼎足之势聊天系统在通信时使用UDP 协议。下面简单介绍利用UDP 协议的通信流程。无连接的客户/服务器工作模式使用UDP 协议进行数据传输。UDP 协议是英文UserDatagram Protocol 的缩写,即用户数据报协议,双

47、方通信之前不需要建立连接。主要用来支持那些需要在计算机之间快速传输数据的网络应用,如各类网络管理和网络控制数据都是利用UDP 协议传送,那些需要一对多或广播通信的应用更是UDP 的用武之地,如网络视频会议就是利用UDP 协议传送的。UDP 协议直接位于IP(网际协议)协议的顶层,该协议的主要作用是将网络数据流压缩成数据报的形式并交网络层发送出去。UDP协议自问世至今,始终是一个经济、实用的网络传输层协议,使用UDP 协议的客户/服务器工作模型如图3.1 所示。19图4.1 无连接的客户/服务器工作模型要通过互联网进行通信,系统至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientS

48、ocket,另一个运行于服务器端,我们称之为ServerSocket。Client1 通过与SocketServer 通讯,可得知其IP 地址Client1IP,Client2 也通过与SocketServer 通讯,也可得知其IP 地址Client2IP。两个IP 地址可存放地址列表里。每个Client 建立两个UDP 和利用两个端口,一个用来发送数据给另一个Client,一个用来接收从另一个Client 的数据。SocketServer 将Client2IP 发给Client1,这样Client1 用SendUDP 向Client2IP 发送数据,Client2 用recievedUDP

49、接收数据。反之,也行。4.4 多线程编程Java 支持内置多线程编程。多线程程序包括两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程,每个线程都是独立的执行路径。因此,多线程是多任务处理的一种特殊形式。多任务处理有两种截然不同的类型:基于进程的和基于线程的。进程本质上一个正在执行的程序。因此,基于进程的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。举例来说,基于进程的读任务处理使你在运行文本编辑器的时候可以同时运行Java 编译器。在基于进程的多任务处理中,程序是调度程序多分派的最小代码。也就是说,进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源。在基于线程的多任务处理环境中,线程是最小的执行单位。线程是进程中的一个单一的连续控制流程。一个进程可以拥有多个线程。这意味着一个程序可以同时执行两个或多个任务的功能。例如,一个文本编辑器可以在打印的同时格式化文本。所以,多进程程序处理大局问题,而多线程程序处理细节问题。多线程程序比多进程程20序需要更少的管理开销。进程是重量级的任务,需要分配它们自己独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报