论文-点对点通讯软件的设计与开发_第1页
论文-点对点通讯软件的设计与开发_第2页
论文-点对点通讯软件的设计与开发_第3页
论文-点对点通讯软件的设计与开发_第4页
论文-点对点通讯软件的设计与开发_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、chnology, the ways 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

4、of great importance 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 princip

5、le of practice, 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, d

6、evelopment of computer 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、c

7、ollectivity design. KeywordsKeywords: Chatting room SocketJava JDBC Network programming 4 目目 录录 1.前言 .6 1.1 开发背景和意义.6 1.2 可行性分析.6 1.2.1 技术可行性 .6 1.2.2 经济可行性 .8 1.2.3 操作可行性 .8 2.相关原理技术简介 .9 2.1 JAVA语言简介.9 2.2 JDBC 介绍.9 2.3 SQL SERVER简介.10 3.系统需求分析 .13 3.1 业务需求.13 3.2 功能需求.13 3.3 可靠性需求.14 3.4 性能需求.14

8、4.多点聊天通信原理 .15 4.1.套接字通信.15 4.1.1 客户端套接字 .16 4.1.2 服务器端套接字 .17 4.2 数据报通信.18 4.3 无连接的客户/服务器程序工作流程.20 4.4 多线程编程.21 5.总体设计 .23 5.1 系统通信模型与拓扑结构设计.23 5.1.1 即时通讯系统的一般模型 .23 5.1.2 即时通讯系统服务的拓扑模型 .24 5.2 数据库设计.24 5.2.1 概念结构设计(ER).25 5.2.2 逻辑结构设计 .25 5.3 功能设计.26 5.2.1 服务器端功能设计 .26 5.2.2 客户端功能设计 .26 5.3 界面设计.2

9、8 5.3.1 服务器端界面设计 .28 5.3.2 客户器端界面设计 .30 6.详细设计 .33 6.1 服务器端详细设计.33 6.2 客户端详细设计.33 6.2.1 功能模块的实现 .33 6.2.2 用户登录功能的实现 .34 5 6.2.3 聊天记录保存 .34 结论 .35 致谢 .36 参考文献 .37 6 1 1. .前言前言 1.11.1 开发背景和意义开发背景和意义 随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式已经 难以满足人们的交流的需求了,在互联网上即时的和好友取得联系,已经成为当今社会 人们主流的联系方式。同时,即时通信系统对现代企业也有着

10、重大意义,它能实现快速 人际交流、数据共享,从而提高效率和生产力。实时通信为诸企业开拓了网络应用的新 领域。自从它诞生以来,以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已 经成为网络生活中不可或缺的一部分。越来越多的企业已开始认识到即时通信工具能够 带来极高的生产力,借助它的应用,来提高业务协同性及反馈的敏感度和快捷度。因此, 两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了 QQ、UC 等聊天工具,然而QQ、UC 等聊天工具虽然方便、实用,但是,娱乐功能太多, 有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通 讯的专用工具。目前,

11、用于实现单一的即时通讯的软件实在太少,为此,我们决定开发 一个专用于实现多台计算机之间即时通讯的软件,以方便多台计算机之间信息的快速交 流。本系统基于C/S 模式实现,采用Java 语言编写。所有用户都通过服务器端中转消息, 这也是现有大多数聊天系统所采用的模式。本系统真正地实现了多用户聊天的功能,可 以在多点间快速传递信息。同时,它体积小,功能单一,界面简洁美观,容易上手,只 要简单阅读服务器端和客户端的帮助文档即可完全掌握它的使用方法。是网络聊天,特 别是局域网聊天不可多得的好帮手。 1.21.2 可行性分析可行性分析 本节从技术、经济和操作三个方面对系统的可行性做出了分析。确定了系统是否

12、值得 实现。可行性分析是现代软件工程不可或缺的重要组成部分。对问题的可行性做详细认 真的可行性研究,可以避免很多不必要的浪费,确保用最小的代价在尽可能短的时间内 确定问题是否能够解决。 .1 技术可行性技术可行性 经过对系统需求的认真分析,综合各种计算机高级语言的特性和适应范围,最终决 定选择纯面向对象的Java 语言来完成我的毕业设计,Java 是Sun Microsystem 公司 的James Gosling 开发的编程语言。Sun 公司的口号就是网络就是计算机,Java 能使 所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是 为了完成这个任务

13、而来的。使用Java,我们可以相对轻松的编写一个有条理的网络程序。 7 下面就技术可行性方面,对Java 语言作一简要介绍。Java 是一种简单的、面向对象的、 健壮的、安全的、解释的、与平台无关的、多线程、动态的计算机语言。Java 的开发环 境有不同的版本,Sun 公司相继的推出了J2ME、J2SE、J2EE 三大平台,尤其是J2SE 是 Java 2 标准平台,广泛用于工作站、PC 机,被称为“互联网上的世界语”。这些为我 们开发系统提供了强大的平台支持。而且Java 在互联网方面具有得天独厚的优势,也是 最吸引我们的地方之一。 Java 最初是为家用电器进行集成控制而设计的一种语言,因

14、此它必须简单明了。 Java 摒弃了C+中容易引发程序错误的一些特性,如指针、结构以及内存管理等。Java 提供了丰富的库类,可以帮助我们很方便的开发Java 程序。Java 致力于检查程序在编 译和运行时的错误。Java 也是一种强类型的语言,其类型检查比C+还要严格,类型检 查帮助我们检查出许多开发早期出现的错误。Java 自己负责内存管理,提供了垃圾回收 机制,有效的避免了C+中最头疼的内存泄露问题。Java 的安全性可以从两个方面得到 保证。一方面,在Java 语言里删除了指针和释放内存等C+功能,避免了非法内存操作; 另一方面,通过Java 的安全体系架构来确保Java 代码的安全性

15、。Java 作为一种网络语 言,其源代码被编译成一种结构中立的中间文件格式。只要有Java 运行系统的机器都能 执行这种中间代码。Java 源程序被编译成一种与机器无关的字节码格式,在Java 虚拟 机上运行。Java 语言的一个重要的特性就是在语言级别支持多线程的程序设计,使得在 编写多线程程序时十分的简单。JVM 很好的管理多个线程同时运行过程中了资源共享问 题。Java 的动态性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所 需要的类。Java 编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符 号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连

16、接类后,将 符号引用信息转换为数值偏移量。这样,对类中的变量和方法进行更新时就不至于影响 存的代码。 .2 经济可行性经济可行性 在Java 诞生之初,Sun 及其明智的制定了一个开放的发展策略,为Java 的发展创造 了一个良好的环境,可以说正是这个策略造就今天繁荣兴旺的局面,也因此Java 与开源 结下了不解之缘。Java 世界中,开源组织与非盈利机构发挥到了极致,许多出色的工具 都出自它们之手。比如 JUnit、Cactus、Tomcat、Struts、JBoss、Eclipse、ANT、Xerces、Hibernate、Axis、 AspectJ 等等,许多工具还会出现

17、在我们的咖啡馆中,扮演重要的角色。Java 世界中, 8 便宜无好货绝对不成立,这些工具拥有足以和商业软件媲美的质量,很多商业IDE 还集 成了这些工具。“开源,不仅仅是Java 语言,还包括开发工具和框架,相对廉价的开发 成本”。这就使得个人使用Java 作为开发平台成为可能。 .3 操作可行性操作可行性 与C、C+、Visual Basic、Delphi 等计算机语言不同,Java 技术特指应用,而不是 Java 语言。Java 技术广泛应用于各种设备,为你提供各种工具、信息以及好玩的游戏。 Java 为我们提供了可视化的图形API,基于此我们就能开发良好的GUI,为用户提

18、供方便 的操作环境。同时,Java 丰富的类库资源,使得我们在设计的时候可以通过简单的继承 就可以实现许多复杂的功能。Java 优越的可移植性大大提高的软件的可重用性,用Java 开发的软件,可以不经过任何的更改就移植到支持Java 虚拟机的操作系统上,真正的实 现了“一次编译,到处运行”。 9 2.2.相关原理技术简介相关原理技术简介 2.12.1 JavaJava 语言简介语言简介 Java技术是由美国Sun公司倡导和推出的,是一种简单易用、完全面向对象、具 有平台无关性且安全可靠的主要面向Internet的开发工具。Java技术包括Java语言和 Java MediaAPIs、Secur

19、ityAPIs、ManagementAPIs、Java Applet、Java RMI、Java Beans、Java OS、Java Servlet、JDBC、JNDI、Enterprise JavaBeans等。随着Java Servlet的出现和JSP的渐渐成熟,让Java正式的走向了Web开发技术的舞台。Java以其强 大的移植能力,多线程处理和网络处理能力已成为研究人员,开发人员瞩目的焦点,它 与Web技术的有机结合尤其适宜进行网络计算和动态多媒体信息的开发处理。Java技术带 来的是一场革命,它是第一个真正独立于平台的语言,基于Java语言开发的软件可以实 现“一次设计,到处运行”

20、,即Java程序不经改变即可部署到任何运行Java虚拟机的计 算机结构和操作系统,使得整个Web世界发生了翻天覆地的变化。 目前,Sun公司已经将Java技术分成了4大类:服务器使用的企业版(J2EE)、台式电 脑使用的标准版(J2SE)、小型设备使用的微型版(J2ME)以及在欧洲销售的手机中使 用的具有智能卡和标识标签功能的Java Card。 2.22.2 JDBCJDBC 介绍介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 组成

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

22、可以让它在任何平台上运行, 这也是Java语言“编写一次,处处运行”的优势。 Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程 序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为 程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提 10 供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥 接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的 接口。 Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写

23、 数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对 话的方法。而 JDBC 正是作为此种用途的机制。 JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的 网页,而该 applet 使用的信息可能来自远程数据库企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编 程语言,对从 Java 中便捷地访问数据库的要求也在日益增加。 MIS

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

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

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

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

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

29、册(含头像)、登录。 5. 服务器监控聊天内容。 6. 服务器过滤非法内容。 7. 服务器发送通知。 8. 服务器踢人。 9. 保存服务器日志。 10.保存用户聊天信息。 3.23.2 功能需求功能需求 聊天室软件共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来 的消息,客户端需登陆到服务器才可以实现正常聊天功能。 1)服务器端的主要功能如下 1.处理用户注册 2.处理用户登录 3.处理用户发送信息 4.处理用户得到信息 5.处理用户退出 2)客户端的主要功能如下 1.用户注册界面及结果 2.用户登录界面及结果 3.用户发送信息界面及结果 4.用户得到信息界面及结果 13 5.

30、用户退出界面及结果 3.33.3 可靠性需求可靠性需求 多点聊天系统是一个应用软件,要传送的数据必须通过传输层来完成。在传输层有两 个传输协议可以使用,就是UDP 协议和TCP 协议。UDP 协议是无连接的传输协议,也没 有保证可靠传输的措施,就是说它不能保证传输质量。而TCP 协议是面向连接的协议, 通过对传输数据的每一个字节统一编号、接收端确认、发送端超时重传、流量控制、拥 塞控制等措施来保证所传输数据的可靠性。要保证多点聊天系统的通信可靠性,必须选 择可靠的传输协议。 本系统设计时选择了TCP 协议作为传输协议。TCP 协议在一个应用程序向另一个应用 程序发送数据之前,两个进程之间必须经

31、过三次“握手”,为后续的数据可靠传输发送 一些预备数据段。TCP“连接”也不像线路交换网络中的端到端的TDM 或者FDM 电路,它 不是一个虚电路,连接状态完全驻留在两个终端系统中。同时,TCP 协议通过错误检测、 设置计时器、在数据段头部设置顺序号和确认号字段等机制来保证TCP 数据段正确、完 整、有序的传输到接收方。 3.43.4 性能需求性能需求 运行环境:Windows 2000、XP、2003、Vista或Windows 7 必要环境:JDK 1.5及以上 硬件环境:CPU 1GHz以上,内存1024MB以上 14 4.4.多点聊天通信原理多点聊天通信原理 本章是整个系统实现的理论部

32、分,将介绍多点聊天系统实现的基本原理,对套接字、 数据报通信和多线程等相关技术进行了讨论。 .套接字通信套接字通信 套接字(Socket)是网络通信的基本操作单元,又称作端口,通常用来实现客户方和服 务方的连接。网络上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向 通信前链路的每一端都建立一个Socket,通过对Socket 的读/写操作实现网络的通信功 能。套接字是网络通信的一个标准,它就像房中的电源插座,无论是电灯还是电脑等电 器,它们只要使用220V 50HZ 的交流电压,插在电源插座上能正常工作。 套接字分为以下3 种类型: (1) 流套接字 这是最常用的套接

33、字类型,TCP/IP 协议簇中的TCP 协议使用此类接口,它提供面向 连接的(建立虚电路)、无差错的、发送先后顺序一致的、包长度不限和非重复的网络 信包传输。 (2) 数据报套接字 TCP/IP 协议簇中的UDP 协议使用此类接口,它是无连接的服务,以独立的信包进行 网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于 单个报文传输或可靠性不重要的场合。 (3) 原始数据报套接字 提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发 新的协议和提取协议较隐蔽的功能。所有Socket 通信程序的基本结构都是一样的,主要 有创建Socket、打开连

34、接到Socket 的输入流和输出流、按照一定的协议对Socket 进行 读写操作、关闭Socket 这四个步骤,通过这四个步骤可以完成一般的Socket 通信。为 了完成Socket 通信,包中提供了Socket 和ServerSocket 这两个类,它们分别 用来表示双向连接的客户端和服务端,它们的构造函数如下: Socket(InetAddress address,int port) Socket(InetAddress address,int port,Boolean stream) Socket(String host,int port) 15 Socket(String host,i

35、nt port,Boolean stream) ServerSocket(int port) ServerSocket(int port,int count) 其中,address 代表双向连接另一方的IP 地址,host 为主机名,port 为端口号, stream 用来指定是流套接字还是数据报套接字,count 表示服务器能够支持的最大连接 数。这里涉及到一个端口号分配的问题,TCP/IP 将端口号分为两部分,少量的作为保留 端口,端口号小于256,以全局方式分配给服务进程。因此每一个标准服务器都拥有一个 全局公认的端口号,即使在不同的机器上其端口号也相同。对于常见的保留端口号主要 有:8

36、0 端口提供WWW 服务、23 端口提供telnet 服务、21 端口提供FTP 服务、110 端 口为POP 服务等。剩余的为自由端口号,比如TCP 协议可以有123 端口,UDP 协议也可 以有123 端口,这并不冲突,因为不同的协议有完全独立的软件模块。但是作为唯一通 信连接的套接字之间是不能重复的。作为服务器的应用程序只能同时绑定一个端口号, 但是,一个服务器程序在同一端口上可以响应若干客户端请求,由于不同的客户端对应 于不同的主机地址和端口号,所以这仍然具有套接字的唯一性。 .1 客户端套接字客户端套接字 客户端/服务器是一种网络服务模式。在该模式中,客户机和服务器之

37、间需要定义一 套通信协议,并创建一个Socket 类,利用这个类来建立一条可靠的链接;然后,客户端 /服务器再在这条连接上可靠地传输数据。客户端发出请求,服务器监听来自客户机的请 求,并为客户端提供响应服务。利用Socket 类,我们可以轻松地实现网络客户端程序的 编写,Socket 类的一些常用的方法汇总如下: getLocalAddress() 读取套接字对象的本地地址 getLocalPort() 读取套接字所使用的本地端口号 getInputStream() 得到一个输入流 getOutputStream() 得到一个输出流 通常情况下,客户端只要能够顺序处理服务器程序的响应就可以了,

38、因此客户端程 序通常不使用多线程。 .2 服务器端套接字服务器端套接字 实现套接字的服务端,需要使用ServerSocket 类。ServerSocket 类是服务器程序的 运行基础,它允许程序绑定一个端口号来监听客户端的请求,一旦产生客户端请求,它 16 将接受这一请求,同时产生一个完整的Socket 连接对象。服务器绑定的端口必须公开, 以便让客户端程序知道如何连接这个服务器。同时,作为服务器,它必须能够接收多个 客户的请求,这就需要为服务器设置一个请求队列,如果服务器不能马上响应客户端的 请求,要将这个请求放进请求队列中,等服务器将当前的请求处理完,会自动到请求队 列中按

39、照先后顺序取出请求进行处理。服务器的资源是有限的,这就导致它的最大连接 数是有限的,通过ServerSocket 的构造函数可以指定这个最大连接数。如果不明徐州工 程学院毕业设计(论文)确指定这个连接数,默认最大连接数为50,也就是说,客户端的 请求队列最大可以容纳50 个请求,当超过这个最大连接数时,用户的请求将不再会被响 应。利用SocketServer 也提供了一些方法,它们主要有: accept() 返回一个“已连接”的Socket 对象 getInetAddress() 得到该服务器的IP 地址 getLocalPort() 得到服务器所侦听的端口号 setSoTimeout() 设

40、置服务器超时时间 getSoTimeout() 得到服务器超时时间 由于存在单个服务程序与多个客户程序通信的可能,所以服务程序要响应客户程序 不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立, 然而服务器程序和客户程序的会话可能很长,因此,为加快对客户程序连接请求的响应, 典型的方法是服务器主机运行一个后台线程,这个后台线程处理服务器和客户端程序的 通信。这一点和客户端的程序设计是不同的。 4.24.2 数据报通信数据报通信 现代网络通信主要基于TCP/IP 和UDP 协议。它们都是建立在更底层的IP 协议之上的 两种通信传输协议。前者是以数据流的形式,将传输数据经分

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

42、还有各种控制信息,用以标识发送者用户名、IP 地址和接收者用户名、IP 17 地址等信息。利用数据报传送,但受其长度限制,通常必须将数据分解为多个包,在目 的地再重新组合,而这一切在传输过程中会出现大量的问题。Socket 对象封装了这一切, 让程序员可以将网络连接视为另一种可以读取字节的流。数据报通信协议UDP 是一种非 面向连接的提供不可靠的数据包式的数据传输协议,类似于从邮局发送信件的过程,信 件只要放到邮箱就算完成任务。这说明了一旦数据报被释放给它们预定的目标,不保证 它们一定达到目的地,甚至不保证一定存在数据的接受者。同样,数据报被接收时,不 保证它在传输过程不受损坏,不保证发送它的

43、机器仍在等待响应。此外,数据报传输有 大小限制,每个传输的数据报必须保证在64KB 之内。 Java 通过 DatagramPacket 和DatagramSocket 两个类来实现UDP 协议顶层的数据报。 DatagramPacket 生成的对象表示一个数据报,而DatagramSocket 是用来发送和接受数 据包的类。生成DatagramPacket 对象可以用下面四个构造函数: DatagramPacket(byte data,int size) DatagramPacket(byte data,int offset, int size) DatagramPacket(byte da

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

45、。对于DatagramPacket 的内部状态,可以用如下方法获得。这些方法对数据包的 目标地址和端口号以及原始数据和数据长度有完全的使用权,下面列举出这些方法: InetAddress getAddress() 返回目标文件InetAddress,一般用于发送int getPort() 返回端口号byte getData() 返回包含在数据包中的字节数据。多用于在接收数据之后 从数据包来检索数据int getLength() 返回包含在将从getData()方法返回的字节数组的 有效数据长度。通常它与整个字节数组长度不等。前面说过,DatagramSocket 类用来发 送和接收数据包。因此

46、,在用数据报方式编写客户端/ 服务器端程序时, 无论是在客户 端和是服务器端, 首先需要建立DatagramSocket 对象,用来接收和发送数据报,然后 使用DatagramPacket 类对象作为传输数据的载体。DatagramSocket 类常用的构造函数 如下: 18 DatagramSocket() DatagramSocket(int port) DatagramSocket(int port,InetAddress ipAddress) 通常,DatagramSocket 接受数据报要用receive(DatagramPacket p)方法,而发送数 据报则使用send(Data

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

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

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

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

51、用recievedUDP 接收数据。反之,也行。 4.44.4 多线程编程多线程编程 Java 支持内置多线程编程。多线程程序包括两条或两条以上并发运行的部分。程序 中每个这样的部分都叫一个线程,每个线程都是独立的执行路径。因此,多线程是多任 务处理的一种特殊形式。多任务处理有两种截然不同的类型:基于进程的和基于线程的。 进程本质上一个正在执行的程序。因此,基于进程的多任务处理的特点是允许你的计算 机同时运行两个或更多的程序。举例来说,基于进程的读任务处理使你在运行文本编辑 器的时候可以同时运行Java 编译器。在基于进程的多任务处理中,程序是调度程序多分 派的最小代码。也就是说,进程是资源申

52、请、调度和独立运行的单位,因此,它使用系 统中的运行资源。在基于线程的多任务处理环境中,线程是最小的执行单位。线程是进 程中的一个单一的连续控制流程。一个进程可以拥有多个线程。这意味着一个程序可以 同时执行两个或多个任务的功能。例如,一个文本编辑器可以在打印的同时格式化文本。 所以,多进程程序处理大局问题,而多线程程序处理细节问题。多线程程序比多进程程 20 序需要更少的管理开销。进程是重量级的任务,需要分配它们自己独立的地址空间。进 程间通信是昂贵和受限的。进程间的转换也是很需要花费的。另一方面,线程是轻量级 的选手,它和进程一样拥有独立的执行控制,由操作系统负责调度。区别在于线程没有 独立

53、的存储空间,而是和所属进程的其他线程共享一个存储空间,因此,线程间通信是 容易的,线程间的转换也是低开销的。当Java 程序使用多进程的任务处理环境时,多进 程的程序不受Java 的控制,而多线程则受控于Java。 多线程可以帮会你写出CPU 最大利用率的高效程序,因为空闲时间保持最低。这对 Java 运行的交互式的网络互联环境至关重要,因为空闲时间是公共的,举个例子来说, 网络的数据处理传输速率远低于计算机处理能力,本地文件系统资源的读写速度远低于 CPU 的处理能力,当然,用户输入也比计算机慢的多。在传统的单线程环境中,你的程 序必须等待每一个这样的任务完成以后才能执行下一步尽管CPU 有

54、很多空闲时间。多 线程是你能够获得并充分利用这些空闲时间。 多线程编程简单,效率高(能直接共享数据和资源,而多进程却不能) 适合于开发多种交互接口的程序 减轻编写交互频繁,涉及面多的程序的困难 在本系统中,设置后台线程处理服务器和客户程序的通信。服务器资源以轻量级的线 程提供,和多个客户线程并发连接通信。这样可以减轻服务器端的开销,同时保证了多 个用户端连接能够得到快速而高效的服务。 21 5.5.总体设计总体设计 总体设计是回答“概括地说,系统应该如何实现?”这个问题。它要完成的主要任务 是划分出组成系统的物理元素,设计软件结构,也就是确定系统中每个程序是由哪些模 块组成,以及各个模块之间的

55、关系。 5.15.1 系统通信模型与拓扑结构设计系统通信模型与拓扑结构设计 .1 即时通讯系统的一般模型即时通讯系统的一般模型 即时通讯服务有两个实体:发送者和接受者。即时通讯协议定义了即时通讯服务、发 信者和接受者之间的交互作用。即时通讯服务与其他邮件服务不同之处在于,即时消息 本身足够的小,便于快速交付到接受者。个体,用户代理,即时通讯系统的模型用图5-1 表示 图5-1 即时通信系统的一般模型 该模型显示了通信系统服务器端和客户端之间的联系。首先配制并启动服务器端,进 行端口的侦听。当有用户登陆时,在文本区能显示用户XXX 上线,并将在线总人数通知 其他客户端。当客户端1

56、 向客户端2 发送信息时,信息首先发送给服务器端,通过服务 器的中转,再传递给客户端2。系统支持多点聊天,一个客户端可以通过群聊的方式向所 有其他的客户端发送信息。 22 .2 即时通讯系统服务的拓扑模型即时通讯系统服务的拓扑模型 如图5-2,现在不少即时通讯系统服务的内部拓扑中采用模式一;也有极其个别系统在 即时通讯服务上面采用模式二(例如,深圳腾讯的QQ 服务中的即时通讯服务,发信者首 先考虑直接与即时收信箱进行通讯,如果发现直接通讯超时,会转为使用服务器中转完 成通讯)。模式一是一种非常成熟的模式,大多数TCP/IP 应用系统,例如SMTP 服务、 DNS 服务、WWW

57、服务等都是使用这种模式。模式二,对于模式一是一个技术上的修正, 虽然这个修正带来了新的问题,但是其实用性是不可质疑的。本系统主要采用模式二的 变体结构,由一个主服务器承担消息的接受和转发工作,同时监听用户上下线信息,以 便通过其他已登陆用户。 5.25.2 数据库设计数据库设计 本聊天室系统使用了SQL Server 2000数据库用于保存用户注册信息和系统日志信息, 其中用户实体有用户名、密码、年龄、性别、email和头像6个属性,日志有三个属性, 分别是编号、日志内容和时间。 .1 概念结构设计(概念结构设计(ERER) 本系统共有用户和日志两个实体,其实体关系图如下图5-

58、3所示: 23 用户 用户名 年龄 密 码 性别 Email 头像 日志 编号 日志内容 时间 1 : N 图5-3 用户和日志之间ER图 .2 逻辑结构设计逻辑结构设计 系统有两个实体,相应地设计了两个数据库表,分别是用户表和日志表。逻辑结构如 下表5-1和表5-2所示: 表5-1 用户表yonghu 字段名数据类型长度含义备注 custNamevarchar50 用户名 NOT NULL CustPasswordvarchar50 密码 NOT NULL Agevarchar50 年龄 NOT NULL Sexvarchar50 性别 NOT NULL Emailvarch

59、ar50EmailNOT NULL headvarchar50 头像 NOT NULL 表5-2 系统日志表logs 字段名数据类型长度含义备注 Idint4 自动编号 NOT NULL 24 Textvarchar255 日志内容 NOT NULL shijianvarchar50 时间 NOT NULL 5.35.3 功能设计功能设计 .1 服务器端功能设计服务器端功能设计 聊天室服务器端负责建立聊天室服务器,侦听客户端链接,记录客户端聊天信息,过 滤不良词汇,实现用户注册等功能。其结构图如下图5-4所示: ServerFrame 类 服务端界面 AppServer 类 服

60、务器监听 Connection 类 处理用户请求 WordFilter 类 聊天内容过滤 图5-4 服务端内部结构图 .2 客户端功能设计客户端功能设计 聊天室客户端可以实现用户注册功能、用户登录聊天室、参与聊天,查看聊天内容, 和指定的人聊天,设置界面字体大小和颜色等功能。结构图如下图5-5所示: 25 Login 类 登录界面 ChatClient 类 客户端入口 ChatRoom 类 聊天室主窗口 Chat 类 聊天消息实体类 Clock 类 时钟显示 Register 类 用户注册界面 图5-5 客户端结构图 5.35.3 界面设计界面设计 .1 服务器

温馨提示

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

评论

0/150

提交评论