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

下载本文档

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

文档简介

PAGEPAGE38设计题目点对点通讯软件的设计与开发学生姓名学号学院专业班级指导老师指导老师职称年月日

摘要随着计算机网络技术的快速发展,人们的交流方式越来越多,传统的通信方式在速度和可靠性方面已经很难满足人们的需要,即时通信系统已经越来越受欢迎。同时,即时通信系统对现代企业也有着重大意义,它为诸企业开拓了网络应用的新领域。自从它诞生以来,以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已经成为网络生活中不可或缺的一部分。本着学以致用的原则,本人开发了这套多用户网络聊天室系统,以满足网络用户的通讯需求。该系统具有操作简单、界面友好、功能丰富等优点。它采用Eclipse为基本开发环境,用java语言进行编写,开发中充分使用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程、JDBC数据库编程技术等。本论文就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深入细致的讨论。关键词:聊天室SocketJavaJDBC网络编程

AbstractAlongwiththerapiddevelopmentofcomputernetworktechnology,thewaysofpeople’scommunicationareincreasedrapidly.Thetraditionalmeansofcommunicationhasbecomeverydifficulttomeetpeople'sneedsinspeedandreliability.Instantcommunicationsystemhasbecomethenewdarlingsofthepeople.Meanwhile,Instantcommunicationsystemisalsoofgreatimportancetothemodernenterprises.Itexploitsanewdomainfortheenterprise.Ithasbeenenjoyedbythemajorityofindividualusersforitsreal-timeinteractionbetweentheadvantagesoflowratessinceitsbored.Ithasbeenanintegralpartofnetworklife.Inapplyoftheprincipleofpractice,Idevelopedthesetofmulti-pointchattingsystemtomeetthenetworkusers'needsofcommunication.Thissystemhassomecharacteristicasfollows:simplifyoperation,friendlyinterface,singlefunction.ThebasicdevelopmentenvironmentwithEclipse,writtenwithjavalanguage,developmentofcomputernetworkprogrammingusingthebasictheoryofknowledge,suchasTCP/IPprotocol,client/servermode(Client/Servermode),networkprogrammingdesignmethod.Thispaperintroducedtheprocessofthesystem'sdevelopmentindetail,anddeeplydiscussedtheprincipleofsystem、collectivitydesign.Keywords:ChattingroomSocketJavaJDBCNetworkprogramming

目录1.前言 61.1开发背景和意义 61.2可行性分析 61.2.1技术可行性 61.2.2经济可行性 81.2.3操作可行性 82.相关原理技术简介 92.1Java语言简介 92.2JDBC介绍 92.3SQLServer简介 103.系统需求分析 133.1业务需求 133.2功能需求 133.3可靠性需求 143.4性能需求 144.多点聊天通信原理 154.1.套接字通信 154.1.1客户端套接字 164.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.2客户端详细设计 336.2.1功能模块的实现 336.2.2用户登录功能的实现 346.2.3聊天记录保存 34结论 35致谢 36参考文献 37

1.前言1.1开发背景和意义随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式已经难以满足人们的交流的需求了,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。同时,即时通信系统对现代企业也有着重大意义,它能实现快速人际交流、数据共享,从而提高效率和生产力。实时通信为诸企业开拓了网络应用的新领域。自从它诞生以来,以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已经成为网络生活中不可或缺的一部分。越来越多的企业已开始认识到即时通信工具能够带来极高的生产力,借助它的应用,来提高业务协同性及反馈的敏感度和快捷度。因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了QQ、UC等聊天工具,然而QQ、UC等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯的专用工具。目前,用于实现单一的即时通讯的软件实在太少,为此,我们决定开发一个专用于实现多台计算机之间即时通讯的软件,以方便多台计算机之间信息的快速交流。本系统基于C/S模式实现,采用Java语言编写。所有用户都通过服务器端中转消息,这也是现有大多数聊天系统所采用的模式。本系统真正地实现了多用户聊天的功能,可以在多点间快速传递信息。同时,它体积小,功能单一,界面简洁美观,容易上手,只要简单阅读服务器端和客户端的帮助文档即可完全掌握它的使用方法。是网络聊天,特别是局域网聊天不可多得的好帮手。1.2可行性分析本节从技术、经济和操作三个方面对系统的可行性做出了分析。确定了系统是否值得实现。可行性分析是现代软件工程不可或缺的重要组成部分。对问题的可行性做详细认真的可行性研究,可以避免很多不必要的浪费,确保用最小的代价在尽可能短的时间内确定问题是否能够解决。1.2.1技术可行性经过对系统需求的认真分析,综合各种计算机高级语言的特性和适应范围,最终决定选择纯面向对象的Java语言来完成我的毕业设计,Java是SunMicrosystem公司的JamesGosling开发的编程语言。Sun公司的口号就是"网络就是计算机",Java能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。使用Java,我们可以相对轻松的编写一个有条理的网络程序。下面就技术可行性方面,对Java语言作一简要介绍。Java是一种简单的、面向对象的、健壮的、安全的、解释的、与平台无关的、多线程、动态的计算机语言。Java的开发环境有不同的版本,Sun公司相继的推出了J2ME、J2SE、J2EE三大平台,尤其是J2SE是Java2标准平台,广泛用于工作站、PC机,被称为“互联网上的世界语”。这些为我们开发系统提供了强大的平台支持。而且Java在互联网方面具有得天独厚的优势,也是最吸引我们的地方之一。Java最初是为家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java摒弃了C++中容易引发程序错误的一些特性,如指针、结构以及内存管理等。Java提供了丰富的库类,可以帮助我们很方便的开发Java程序。Java致力于检查程序在编译和运行时的错误。Java也是一种强类型的语言,其类型检查比C++还要严格,类型检查帮助我们检查出许多开发早期出现的错误。Java自己负责内存管理,提供了垃圾回收机制,有效的避免了C++中最头疼的内存泄露问题。Java的安全性可以从两个方面得到保证。一方面,在Java语言里删除了指针和释放内存等C++功能,避免了非法内存操作;另一方面,通过Java的安全体系架构来确保Java代码的安全性。Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行。Java语言的一个重要的特性就是在语言级别支持多线程的程序设计,使得在编写多线程程序时十分的简单。JVM很好的管理多个线程同时运行过程中了资源共享问题。Java的动态性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类。Java编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。这样,对类中的变量和方法进行更新时就不至于影响存的代码。1.2.2经济可行性在Java诞生之初,Sun及其明智的制定了一个开放的发展策略,为Java的发展创造了一个良好的环境,可以说正是这个策略造就今天繁荣兴旺的局面,也因此Java与开源结下了不解之缘。Java世界中,开源组织与非盈利机构发挥到了极致,许多出色的工具都出自它们之手。比如JUnit、Cactus、Tomcat、Struts、JBoss、Eclipse、ANT、Xerces、Hibernate、Axis、AspectJ等等,许多工具还会出现在我们的咖啡馆中,扮演重要的角色。Java世界中,便宜无好货绝对不成立,这些工具拥有足以和商业软件媲美的质量,很多商业IDE还集成了这些工具。“开源,不仅仅是Java语言,还包括开发工具和框架,相对廉价的开发成本”。这就使得个人使用Java作为开发平台成为可能。1.2.3操作可行性与C、C++、VisualBasic、Delphi等计算机语言不同,Java技术特指应用,而不是Java语言。Java技术广泛应用于各种设备,为你提供各种工具、信息以及好玩的游戏。Java为我们提供了可视化的图形API,基于此我们就能开发良好的GUI,为用户提供方便的操作环境。同时,Java丰富的类库资源,使得我们在设计的时候可以通过简单的继承就可以实现许多复杂的功能。Java优越的可移植性大大提高的软件的可重用性,用Java开发的软件,可以不经过任何的更改就移植到支持Java虚拟机的操作系统上,真正的实现了“一次编译,到处运行”。

2.相关原理技术简介2.1Java语言简介 Java技术是由美国Sun公司倡导和推出的,是一种简单易用、完全面向对象、具有平台无关性且安全可靠的主要面向Internet的开发工具。Java技术包括Java语言和JavaMediaAPIs、SecurityAPIs、ManagementAPIs、JavaApplet、JavaRMI、JavaBeans、JavaOS、JavaServlet、JDBC、JNDI、EnterpriseJavaBeans等。随着JavaServlet的出现和JSP的渐渐成熟,让Java正式的走向了Web开发技术的舞台。Java以其强大的移植能力,多线程处理和网络处理能力已成为研究人员,开发人员瞩目的焦点,它与Web技术的有机结合尤其适宜进行网络计算和动态多媒体信息的开发处理。Java技术带来的是一场革命,它是第一个真正独立于平台的语言,基于Java语言开发的软件可以实现“一次设计,到处运行”,即Java程序不经改变即可部署到任何运行Java虚拟机的计算机结构和操作系统,使得整个Web世界发生了翻天覆地的变化。目前,Sun公司已经将Java技术分成了4大类:服务器使用的企业版(J2EE)、台式电脑使用的标准版(J2SE)、小型设备使用的微型版(J2ME)以及在欧洲销售的手机中使用的具有智能卡和标识标签功能的JavaCard。2.2JDBC介绍JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯JavaAPI编写数据库应用程序,同时,JDBC也是个商标名。有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBCAPI,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。Java具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是Java应用程序与各种不同数据库之间进行对话的方法。而JDBC正是作为此种用途的机制。JDBC扩展了Java的功能。例如,用Java和JDBCAPI可以发布含有applet的网页,而该applet使用的信息可能来自远程数据库企业也可以用JDBC通过Intranet将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有Windows、Macintosh和UNIX等各种不同的操作系统)。随着越来越多的程序员开始使用Java编程语言,对从Java中便捷地访问数据库的要求也在日益增加。MIS管理员们都喜欢Java和JDBC的结合,因为它使信息传播变得容易和经济。企业可继续使用它们安装好的数据库,并能便捷地存取信息,即使这些信息是储存在不同数据库管理系统上。新程序的开发期很短。安装和版本控制将大为简化。程序员可只编写一遍应用程序或只更新一次,然后将它放到服务器上,随后任何人就都可得到最新版本的应用程序。对于商务上的销售信息服务,Java和JDBC可为外部客户提供获取信息更新的更好方法。 2.3SQLServer简介本次使用SQLServer2000作为后台数据库,SQLServer是面向中小型企业应用的数据库软件,它对用户十分友好,使用起来非常方便。其自带的企业管理器和查询分析器为开发者管理和使用数据库提供了极大便利。而且,相对于ACCESS数据库来说,SQLServer的安全性更高。1.SQLServer是一个功能全面的数据库SQLServer是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理。SQLServer数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。2.SQLServer数据平台为各种规模的组织提供了以下好处:(1)充分利用数据资产。除了为业务线和分析应用程序提供一个安全可靠的数据库之外,SQLServer也使用户能够通过嵌入的功能(如报表、分析和数据挖掘等)从他们的数据中得到更多的价值。您可以充分利用其强大功能性和灵活性将数据传递到组织的每个角落,而成本仅为其他一些系统的一部分。(2)提高生产效率。通过全面的BI功能以及熟悉的MicrosoftOffice系统之类的工具集成,SQLServer为组织内信息工作者提供关键的、及时的业务信息以满足他们特定的需要。SQLServer的目标是将BI扩展到组织内的所有用户,并且最终帮助组织内所有级别的用户能够基于他们最有价值的资产——数据来做出更好的业务决策。(3)减少IT复杂性。SQLServer简化了开发、部署和管理业务线和分析应用程序的复杂度,它为开发人员提供了一个灵活的开发环境,为数据库管理人员提供了集成的自动管理工具。降低总体拥有成本(TCO)。SQLServer中集成的方法和对产品易用性和部署上的关注提供了行业上最低的规划、实现和维护成本,使数据库投资能快速得到回报。3.SQLServer可以与各种软件开发无缝集成SQLServer数据引擎是企业数据管理解决方案的核心。此外SQLServer结合了分析、报表、集成和通知功能。这使企业可以构建和部署经济有效的BI解决方案,帮助团队通过记分卡、Dashboard、Webservices和移动设备将数据应用推向业务的各个领域。此外,借助SQLServer的JDBC驱动包,可以很容易地在Eclipse开发工具中编写基于SQLServer数据库的应用程序。

3.系统需求分析对软件需求的深入理解是软件工作者获得成功的前提条件,只有真正满足用户需求的软件才是有用的软件。系统需求分析将要回答的问题是:用户需要什么样的系统,系统必须做些什么等问题。只有锁定目标,才能更有效率,更正确的工作。3.1业务需求1.与聊天室成员一起聊天。2.可以与聊天室成员私聊。3.可以改变聊天内容风格。4.用户注册(含头像)、登录。5.服务器监控聊天内容。6.服务器过滤非法内容。7.服务器发送通知。8.服务器踢人。9.保存服务器日志。10.保存用户聊天信息。3.2功能需求聊天室软件共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登陆到服务器才可以实现正常聊天功能。1)服务器端的主要功能如下1.处理用户注册 2.处理用户登录 3.处理用户发送信息 4.处理用户得到信息 5.处理用户退出2)客户端的主要功能如下1.用户注册界面及结果 2.用户登录界面及结果 3.用户发送信息界面及结果 4.用户得到信息界面及结果 5.用户退出界面及结果3.3可靠性需求多点聊天系统是一个应用软件,要传送的数据必须通过传输层来完成。在传输层有两个传输协议可以使用,就是UDP协议和TCP协议。UDP协议是无连接的传输协议,也没有保证可靠传输的措施,就是说它不能保证传输质量。而TCP协议是面向连接的协议,通过对传输数据的每一个字节统一编号、接收端确认、发送端超时重传、流量控制、拥塞控制等措施来保证所传输数据的可靠性。要保证多点聊天系统的通信可靠性,必须选择可靠的传输协议。本系统设计时选择了TCP协议作为传输协议。TCP协议在一个应用程序向另一个应用程序发送数据之前,两个进程之间必须经过三次“握手”,为后续的数据可靠传输发送一些预备数据段。TCP“连接”也不像线路交换网络中的端到端的TDM或者FDM电路,它不是一个虚电路,连接状态完全驻留在两个终端系统中。同时,TCP协议通过错误检测、设置计时器、在数据段头部设置顺序号和确认号字段等机制来保证TCP数据段正确、完整、有序的传输到接收方。3.4性能需求运行环境:Windows2000、XP、2003、Vista或Windows7必要环境:JDK1.5及以上硬件环境:CPU1GHz以上,内存1024MB以上

4.多点聊天通信原理本章是整个系统实现的理论部分,将介绍多点聊天系统实现的基本原理,对套接字、数据报通信和多线程等相关技术进行了讨论。4.1.套接字通信套接字(Socket)是网络通信的基本操作单元,又称作端口,通常用来实现客户方和服务方的连接。网络上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向通信前链路的每一端都建立一个Socket,通过对Socket的读/写操作实现网络的通信功能。套接字是网络通信的一个标准,它就像房中的电源插座,无论是电灯还是电脑等电器,它们只要使用220V50HZ的交流电压,插在电源插座上能正常工作。套接字分为以下3种类型:(1)流套接字这是最常用的套接字类型,TCP/IP协议簇中的TCP协议使用此类接口,它提供面向连接的(建立虚电路)、无差错的、发送先后顺序一致的、包长度不限和非重复的网络信包传输。(2)数据报套接字TCP/IP协议簇中的UDP协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。(3)原始数据报套接字提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议和提取协议较隐蔽的功能。所有Socket通信程序的基本结构都是一样的,主要有创建Socket、打开连接到Socket的输入流和输出流、按照一定的协议对Socket进行读写操作、关闭Socket这四个步骤,通过这四个步骤可以完成一般的Socket通信。为了完成Socket通信,包中提供了Socket和ServerSocket这两个类,它们分别用来表示双向连接的客户端和服务端,它们的构造函数如下:Socket(InetAddressaddress,intport)Socket(InetAddressaddress,intport,Booleanstream)Socket(Stringhost,intport)Socket(Stringhost,intport,Booleanstream)ServerSocket(intport)ServerSocket(intport,intcount)其中,address代表双向连接另一方的IP地址,host为主机名,port为端口号,stream用来指定是流套接字还是数据报套接字,count表示服务器能够支持的最大连接数。这里涉及到一个端口号分配的问题,TCP/IP将端口号分为两部分,少量的作为保留端口,端口号小于256,以全局方式分配给服务进程。因此每一个标准服务器都拥有一个全局公认的端口号,即使在不同的机器上其端口号也相同。对于常见的保留端口号主要有:80端口提供WWW服务、23端口提供telnet服务、21端口提供FTP服务、110端口为POP服务等。剩余的为自由端口号,比如TCP协议可以有123端口,UDP协议也可以有123端口,这并不冲突,因为不同的协议有完全独立的软件模块。但是作为唯一通信连接的套接字之间是不能重复的。作为服务器的应用程序只能同时绑定一个端口号,但是,一个服务器程序在同一端口上可以响应若干客户端请求,由于不同的客户端对应于不同的主机地址和端口号,所以这仍然具有套接字的唯一性。4.1.1客户端套接字客户端/服务器是一种网络服务模式。在该模式中,客户机和服务器之间需要定义一套通信协议,并创建一个Socket类,利用这个类来建立一条可靠的链接;然后,客户端/服务器再在这条连接上可靠地传输数据。客户端发出请求,服务器监听来自客户机的请求,并为客户端提供响应服务。利用Socket类,我们可以轻松地实现网络客户端程序的编写,Socket类的一些常用的方法汇总如下:getLocalAddress()读取套接字对象的本地地址getLocalPort()读取套接字所使用的本地端口号getInputStream()得到一个输入流getOutputStream()得到一个输出流通常情况下,客户端只要能够顺序处理服务器程序的响应就可以了,因此客户端程序通常不使用多线程。4.1.2服务器端套接字实现套接字的服务端,需要使用ServerSocket类。ServerSocket类是服务器程序的运行基础,它允许程序绑定一个端口号来监听客户端的请求,一旦产生客户端请求,它将接受这一请求,同时产生一个完整的Socket连接对象。服务器绑定的端口必须公开,以便让客户端程序知道如何连接这个服务器。同时,作为服务器,它必须能够接收多个客户的请求,这就需要为服务器设置一个请求队列,如果服务器不能马上响应客户端的请求,要将这个请求放进请求队列中,等服务器将当前的请求处理完,会自动到请求队列中按照先后顺序取出请求进行处理。服务器的资源是有限的,这就导致它的最大连接数是有限的,通过ServerSocket的构造函数可以指定这个最大连接数。如果不明徐州工程学院毕业设计(论文)确指定这个连接数,默认最大连接数为50,也就是说,客户端的请求队列最大可以容纳50个请求,当超过这个最大连接数时,用户的请求将不再会被响应。利用SocketServer也提供了一些方法,它们主要有:accept()返回一个“已连接”的Socket对象getInetAddress()得到该服务器的IP地址getLocalPort()得到服务器所侦听的端口号setSoTimeout()设置服务器超时时间getSoTimeout()得到服务器超时时间由于存在单个服务程序与多个客户程序通信的可能,所以服务程序要响应客户程序不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立,然而服务器程序和客户程序的会话可能很长,因此,为加快对客户程序连接请求的响应,典型的方法是服务器主机运行一个后台线程,这个后台线程处理服务器和客户端程序的通信。这一点和客户端的程序设计是不同的。4.2数据报通信现代网络通信主要基于TCP/IP和UDP协议。它们都是建立在更底层的IP协议之上的两种通信传输协议。前者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路。进行连续的、双向的、严格保证数据正确性的传输协议;后者已数据报形式,对拆分后的数据的先后顺序不做要求的文件传输协议。虽然TCP协议提供了有序的、可预测和可靠的信息包数据流,但是这样做的代价也很大。TCP包含很多在拥挤的网络中处理拥塞控制的复杂算法以及信息丢失的预测,这导致了这样传输数据的方式效率很差。因此,数据报通信方式是一种可选的替代方法。多点聊天系统是以UDP协议进行发送和接受消息的,采用C/S模型实现,使之更适合局域网的网络程序。C/S模型主要由客户应用程序、服务器控制程序两部分组成。在网络上传输的信息,不仅限于聊天信息,还有各种控制信息,用以标识发送者用户名、IP地址和接收者用户名、IP地址等信息。利用数据报传送,但受其长度限制,通常必须将数据分解为多个包,在目的地再重新组合,而这一切在传输过程中会出现大量的问题。Socket对象封装了这一切,让程序员可以将网络连接视为另一种可以读取字节的流。数据报通信协议UDP是一种非面向连接的提供不可靠的数据包式的数据传输协议,类似于从邮局发送信件的过程,信件只要放到邮箱就算完成任务。这说明了一旦数据报被释放给它们预定的目标,不保证它们一定达到目的地,甚至不保证一定存在数据的接受者。同样,数据报被接收时,不保证它在传输过程不受损坏,不保证发送它的机器仍在等待响应。此外,数据报传输有大小限制,每个传输的数据报必须保证在64KB之内。Java通过DatagramPacket和DatagramSocket两个类来实现UDP协议顶层的数据报。DatagramPacket生成的对象表示一个数据报,而DatagramSocket是用来发送和接受数据包的类。生成DatagramPacket对象可以用下面四个构造函数:DatagramPacket(bytedata[],intsize)DatagramPacket(bytedata[],intoffset,intsize)DatagramPacket(bytedata[],intsize,InetAddressipAddress,intport)DatagramPacket(bytedata[],intoffset,intsize,InetAddressipAddress,intport)第一个构造函数指定了接受数据的缓冲区和信息包的容量大小。它通过DatagramSocket接收数据。第二种形式允许你在存储数据的缓冲区中指定一个偏移量。第三种形式指定一个于DatagramSocket决定信息包将被送往何处的目标地址和端口。其中InetAddress类为表示IP地址的类。第四种形式从数据中指定的偏移量位置开始传输数据包。对于DatagramPacket的内部状态,可以用如下方法获得。这些方法对数据包的目标地址和端口号以及原始数据和数据长度有完全的使用权,下面列举出这些方法:InetAddressgetAddress()返回目标文件InetAddress,一般用于发送intgetPort()返回端口号byte[]getData()返回包含在数据包中的字节数据。多用于在接收数据之后从数据包来检索数据intgetLength()返回包含在将从getData()方法返回的字节数组的有效数据长度。通常它与整个字节数组长度不等。前面说过,DatagramSocket类用来发送和接收数据包。因此,在用数据报方式编写客户端/服务器端程序时,无论是在客户端和是服务器端,首先需要建立DatagramSocket对象,用来接收和发送数据报,然后使用DatagramPacket类对象作为传输数据的载体。DatagramSocket类常用的构造函数如下:DatagramSocket()DatagramSocket(intport)DatagramSocket(intport,InetAddressipAddress)通常,DatagramSocket接受数据报要用receive(DatagramPacketp)方法,而发送数据报则使用send(DatagramPacketp)方法,这两个方法是DatagramPacket十分常见的方法。要发送一个数据报,首先创建一个DatagramPacket,指定要发送的数据、数据的长度、数据要发送至哪个主机及该主机的哪个端口,然后再用DatagramSocket的send()方法发送数据包;要接收一个数据报,首先必须创建一个在本地主机的特定端口上侦听的DatagramSocket,此套接字只能接受发送至特定端口上的数据包。在Windos操作系统中,已经为网络通信提供了Winsock.dll动态链接库,即API函数。通过Socket,可以调用这些API函数,从而实现网络通信。寻呼系统在通信时可以使用UDP协议,也可以使用TCP协议,本章将分别介绍利用UDP协议和TCP协议的通信原理。4.3无连接的客户/服务器程序工作流程在Windos操作系统中,已经为网络通信提供了Winsock.dll动态链接库,即API函数。通过Socket,可以调用这些API函数,从而实现网络通信。多鼎足之势聊天系统在通信时使用UDP协议。下面简单介绍利用UDP协议的通信流程。无连接的客户/服务器工作模式使用UDP协议进行数据传输。UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,双方通信之前不需要建立连接。主要用来支持那些需要在计算机之间快速传输数据的网络应用,如各类网络管理和网络控制数据都是利用UDP协议传送,那些需要一对多或广播通信的应用更是UDP的用武之地,如网络视频会议就是利用UDP协议传送的。UDP协议直接位于IP(网际协议)协议的顶层,该协议的主要作用是将网络数据流压缩成数据报的形式并交网络层发送出去。UDP协议自问世至今,始终是一个经济、实用的网络传输层协议,使用UDP协议的客户/服务器工作模型如图3.1所示。图4.1无连接的客户/服务器工作模型要通过互联网进行通信,系统至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。Client1通过与SocketServer通讯,可得知其IP地址Client1IP,Client2也通过与SocketServer通讯,也可得知其IP地址Client2IP。两个IP地址可存放地址列表里。每个Client建立两个UDP和利用两个端口,一个用来发送数据给另一个Client,一个用来接收从另一个Client的数据。SocketServer将Client2IP发给Client1,这样Client1用SendUDP向Client2IP发送数据,Client2用recievedUDP接收数据。反之,也行。4.4多线程编程Java支持内置多线程编程。多线程程序包括两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程,每个线程都是独立的执行路径。因此,多线程是多任务处理的一种特殊形式。多任务处理有两种截然不同的类型:基于进程的和基于线程的。进程本质上一个正在执行的程序。因此,基于进程的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。举例来说,基于进程的读任务处理使你在运行文本编辑器的时候可以同时运行Java编译器。在基于进程的多任务处理中,程序是调度程序多分派的最小代码。也就是说,进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源。在基于线程的多任务处理环境中,线程是最小的执行单位。线程是进程中的一个单一的连续控制流程。一个进程可以拥有多个线程。这意味着一个程序可以同时执行两个或多个任务的功能。例如,一个文本编辑器可以在打印的同时格式化文本。所以,多进程程序处理大局问题,而多线程程序处理细节问题。多线程程序比多进程程序需要更少的管理开销。进程是重量级的任务,需要分配它们自己独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也是很需要花费的。另一方面,线程是轻量级的选手,它和进程一样拥有独立的执行控制,由操作系统负责调度。区别在于线程没有独立的存储空间,而是和所属进程的其他线程共享一个存储空间,因此,线程间通信是容易的,线程间的转换也是低开销的。当Java程序使用多进程的任务处理环境时,多进程的程序不受Java的控制,而多线程则受控于Java。多线程可以帮会你写出CPU最大利用率的高效程序,因为空闲时间保持最低。这对Java运行的交互式的网络互联环境至关重要,因为空闲时间是公共的,举个例子来说,网络的数据处理传输速率远低于计算机处理能力,本地文件系统资源的读写速度远低于CPU的处理能力,当然,用户输入也比计算机慢的多。在传统的单线程环境中,你的程序必须等待每一个这样的任务完成以后才能执行下一步—尽管CPU有很多空闲时间。多线程是你能够获得并充分利用这些空闲时间。·多线程编程简单,效率高(能直接共享数据和资源,而多进程却不能)·适合于开发多种交互接口的程序·减轻编写交互频繁,涉及面多的程序的困难在本系统中,设置后台线程处理服务器和客户程序的通信。服务器资源以轻量级的线程提供,和多个客户线程并发连接通信。这样可以减轻服务器端的开销,同时保证了多个用户端连接能够得到快速而高效的服务。

5.总体设计总体设计是回答“概括地说,系统应该如何实现?”这个问题。它要完成的主要任务是划分出组成系统的物理元素,设计软件结构,也就是确定系统中每个程序是由哪些模块组成,以及各个模块之间的关系。5.1系统通信模型与拓扑结构设计5.1.1即时通讯系统的一般模型即时通讯服务有两个实体:发送者和接受者。即时通讯协议定义了即时通讯服务、发信者和接受者之间的交互作用。即时通讯服务与其他邮件服务不同之处在于,即时消息本身足够的小,便于快速交付到接受者。个体,用户代理,即时通讯系统的模型用图5-1表示图5-1即时通信系统的一般模型该模型显示了通信系统服务器端和客户端之间的联系。首先配制并启动服务器端,进行端口的侦听。当有用户登陆时,在文本区能显示用户XXX上线,并将在线总人数通知其他客户端。当客户端1向客户端2发送信息时,信息首先发送给服务器端,通过服务器的中转,再传递给客户端2。系统支持多点聊天,一个客户端可以通过群聊的方式向所有其他的客户端发送信息。5.1.2即时通讯系统服务的拓扑模型如图5-2,现在不少即时通讯系统服务的内部拓扑中采用模式一;也有极其个别系统在即时通讯服务上面采用模式二(例如,深圳腾讯的QQ服务中的即时通讯服务,发信者首先考虑直接与即时收信箱进行通讯,如果发现直接通讯超时,会转为使用服务器中转完成通讯)。模式一是一种非常成熟的模式,大多数TCP/IP应用系统,例如SMTP服务、DNS服务、WWW服务等都是使用这种模式。模式二,对于模式一是一个技术上的修正,虽然这个修正带来了新的问题,但是其实用性是不可质疑的。本系统主要采用模式二的变体结构,由一个主服务器承担消息的接受和转发工作,同时监听用户上下线信息,以便通过其他已登陆用户。5.2数据库设计本聊天室系统使用了SQLServer2000数据库用于保存用户注册信息和系统日志信息,其中用户实体有用户名、密码、年龄、性别、email和头像6个属性,日志有三个属性,分别是编号、日志内容和时间。5.2.1概念结构设计(ER)本系统共有用户和日志两个实体,其实体关系图如下图5-3所示:用户用户用户名年龄密码性别Email头像日志编号日志内容时间1:N图5-3用户和日志之间ER图5.2.2逻辑结构设计系统有两个实体,相应地设计了两个数据库表,分别是用户表和日志表。逻辑结构如下表5-1和表5-2所示:表5-1用户表yonghu字段名数据类型长度含义备注custNamevarchar50用户名NOTNULLCustPasswordvarchar50密码NOTNULLAgevarchar50年龄NOTNULLSexvarchar50性别NOTNULLEmailvarchar50EmailNOTNULLheadvarchar50头像NOTNULL表5-2系统日志表logs字段名数据类型长度含义备注Idint4自动编号NOTNULLTextvarchar255日志内容NOTNULLshijianvarchar50时间NOTNULL5.3功能设计5.2.1服务器端功能设计聊天室服务器端负责建立聊天室服务器,侦听客户端链接,记录客户端聊天信息,过滤不良词汇,实现用户注册等功能。其结构图如下图5-4所示:ServerFrame类ServerFrame类服务端界面AppServer类服务器监听Connection类处理用户请求WordFilter类聊天内容过滤图5-4服务端内部结构图5.2.2客户端功能设计聊天室客户端可以实现用户注册功能、用户登录聊天室、参与聊天,查看聊天内容,和指定的人聊天,设置界面字体大小和颜色等功能。结构图如下图5-5所示:Login类Login类登录界面ChatClient类客户端入口ChatRoom类聊天室主窗口Chat类聊天消息实体类Clock类时钟显示Register类用户注册界面图5-5客户端结构图5.3界面设计5.3.1服务器端界面设计图5-6服务器端主界面图5-6是服务器端主界面。窗体框架的长和宽被设定为固定值,窗体初始化时居中显示。框架整体采用边界型布局格式,该界面上显示了服务器状态、聊天室在线人数以及最大人数、服务器名称、服务器IP地址、协议和端口号、服务器日志等信息,并且可以保存日志信息为文本文件。图5-7用户信息管理界面图5-7是用户信息管理界面设计,左侧使用列表框显示用户聊天内容;右侧显示在线用户一览;下方是系统广播通知发布功能和在线总人数显示功能,并且管理员可以选择某个人将其踢出聊天室。5.3.2客户器端界面设计图5-8用户登录界面图5-9用户注册界面图5-10客户端主界面图5-8是用户登录窗体,图5-9是用户注册窗体,图5-10是客户端聊天室主界面。窗体框架的长和宽被设定为固定值,窗体初始化时居中显示。框架整体采用边界型布局格式。该界面上功能较为丰富,设计了在线用户列表显示、聊天内容展示区、聊天对象选择、表情设置、聊天内容字体、颜色、格式显示、聊天内容发送、清屏功能、私聊功能、保存聊天记录等功能。图5-11时钟查看界面图5-11是一个有趣的功能,用Swing技术绘制的一个小时钟,左上角显示了当前时间。

6.详细设计本章将对服务器与客户端的界面设计、每个功能模块的实现方法、实现过程及相应代码设计进行详细介绍。6.1服务器端详细设计当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问。接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是3秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为3秒最佳,因为每个用户都不可能在3秒内连续发送信息。当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。6.2客户端详细设计6.2.1功能模块的实现ChatClient.java为客户端程序启动类,负责客户端的启动和退出。Login.java为客户端程序登录界面,负责用户帐号信息的验证与反馈。Register.java为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。ChatRoom.java为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java亲密合作。Windowclose为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。Clock.java为客户端程序的一个小程序,实现的一个石英钟功能。6.2.2用户登录功能的实现当用户登录时,客户端由Login.java界面获取用户的信息,并且封装为Customer对象,然后通过建立好的Socket链接之上的对象输出流将用户登录对象发送给服务器端,服务器端将请求转发给Connection进行处理,在Connection类中链接SQLServer数据库验证用户名密码是否正确,如果正确则将该用户信息添加到在线用户列表中。最后将登录结果返回给客户端,客户端判断登录失败时候提示用户;登录成功时则打开聊天室主界面。用户登录成功后,系统将登录窗口隐藏,创建聊天室对象窗口,并且将用户名显示到聊天室窗口的标题栏上。6.2.3聊天记录保存当用户需要保存聊天记录时,直接单击聊天室界面上的保存按钮即可。本程序设计将聊天记录保存到应用程序当前目录下,文件名默认以用户名_message.txt的格式。保存的文件是一个文本文件格式,可以直接用记事本打开查看。

结论本系统主要实现了多点聊天通信功能。它基于C/S模式,以数据报通信为载体,借助套接字编程实现,具有外观简洁,使用简单等特点。可以同时与所有其他用户实现信息的快速交流,为用户节省大量的时间。同时,各客户端又存有完整的用户链表信息,使用者可以选择悄悄话方式同特定的用户进行通信,很好的实现了信息的保密。本系统特别适合局域网用户之间的通信。本文讨论了如何利用java技术开发聊天室系统,基本满足了结构化、界面友好、速度快、安全性以及稳定性等特点。系统着重研究并实现了网络应用的部分。根据实现的情况看,具有较友好的聊天界面生成效果,以及流畅的网络通信效果。生成的聊天室可以达到基本的聊天要求,具有较高的研究价值。系统具有目前聊天室的基本功能:包括支持多种头像,字色,语气选择,支持emote,支持私聊,支持在线聊友查找,支持分屏显示,支持用户定制自己的私人头像,支持脏话过滤,支持嘉宾聊天。屏蔽掉自己讨厌的人物,可以给所有聊友发公共信息。具有速度快,高稳定性,占用系统资源少,用户界面友好等特点。通过毕业设计,发现自己在理论研究和实际工作能力等方面都得到了提高,受益匪浅。同时在老师的指导和课题组同学的共同帮助下,及时总结研究成果,这些无疑会对我今后的工作和学习带来很大的帮助。当然,由于本人能力有限,设计之初有很多好的想法没有实现。比如服务器端必须先告知各客户端其所在主机的ip地址和通信端口,这样做很麻烦。本来想在服务器端启动服务程序中添加一段用于在本局域网范围内发送广播信息的功能段,信息包含服务器ip地址和通信端口,通知各客户端软件自动完成服务器端的ip和端口的配制工作。在编码实现的时候发现问题很难解决,最后不得不放弃。

致谢首先感谢我的指导老师,他的认真务实的工作态度和和蔼可亲的待人方式是我所敬佩的。他严谨、认真,在我们的辅导过程中从未因个人的原因而推脱过。他耐心、细致,把我们需要的理论知识收集总结,又不耐其烦地一遍遍重复讲解。正是他认真负责的态度才使得我的设计工作能如期完成。其次我要感谢很多优秀图书的作者,正是他们的艰辛的劳动成果才使得我能够避开学习中的种种障碍,在最短的时间内达到目标。有时候当我陷入其中,迷惑不解时,往往就是他们的一句精辟的话使我顿悟,大有醍醐灌顶之式。感谢我周围的所有的人,轻松而又愉快的环境才能使人平静下来认真工作。最后,我要把我最真挚的感谢送给我的母校,四年的积累已经使懵懂幼稚的孩童历练成一个敢于直面生活的强者。尽管我知道由我们自己谱写的人生才刚刚开始,但有了大学的锻炼我不会再畏惧任何困难。再一次感谢我的母校!

参考文献[1]张一白崔尚森著.面向对象程序设计――Java.山西:西安电子科技大学出版社,2002[2]W.RichaardStevens.TCP/IP详解卷1:范建华等译.北京:机械工业出版社,2000:1-10[3]AndrewStanenbaum1计算机网络[M]第3版熊桂喜,王小虎译.北京:清华大学出版社,1998[4](美)JamesF.KuroseKeithW.Rose.计算机网络.清华大学出版社,2003-1-1[5]张海藩著.软件工程导论.北京:清华大学出版社,2003[6]BeauWilliamson.DevelopinglPMulticastNetworks.vol2ume[M].顾金星等译.北京:电子工业出版社,2000[7]孙卫琴.基于MVC的JavaWeb设计与开发[M].北京:电子工业出版

温馨提示

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

评论

0/150

提交评论