即时消息系统_第1页
即时消息系统_第2页
即时消息系统_第3页
即时消息系统_第4页
即时消息系统_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

即时消息系统本科毕业设计摘要随着网络通信技术和计算机技术的进一步发展,即时消息正在成为网络在线活动中不可缺少的业务。本课题在现有的网络通信技术、数据库技术和编程技术的基础上设计并实现了网络即时消息系统。该系统采用三层C/S网络系统构架,采用多线程实现服务器的并发处理,采用ODBC接口访问SQLSERVER2000数据库设计数据管理模块,采用J2SE平台和JAVA语言去开发系统。该系统按照软件工程思想采用面向对象和模块化设计方法设计,其中采用了网络通信技术、数据库技术、多线程技术等计算机技术,实现了网络通信的基本功能,具有通信即时性的特点。在论文中,我们将会讨论网络即时消息系统的现状和发展,研究实现此系统的技术背景。然后我们对系统进行需求分析。按照要求,我们将进行总体设计和详细设计,如服务器端的设计,数据库的设计和客户端的设计。最后实现系统的配置和使用。本毕业设计所完成的网络即时消息系统的主要功能如下1服务器端后台启动、监视用户和发送系统消息;2用户登录和注册;3好友管理查找好友、添加好友和删除好友;4通信发送消息、接收消息和聊天记录5上线和隐身。关键词即时消息系统,C/S三层结构,TCP/IP,J2SE平台ABSTRACTWITHTHEFURTHERDEVELOPMENTOFNETWORKCOMMUNICATIONTECHNOLOGYANDCOMPUTERTECHNOLOGY,INSTANTMESSAGINGHASBEENAREQUIREMENTOFONLINEACTIVITIESTHISPROJECTDESIGNANDIMPLEMENTATION,THEINSTANTMESSAGINGBASEDONTHETOPICOFTHEEXISTINGNETWORKCOMMUNICATIONTECHNOLOGY,DATABASETECHNOLOGYANDPROGRAMMINGTECHNOLOGYTHISSYSTEMUSESCOMPOSITESTRUCTUREOFTHREETIERC/STODESIGNSYSTEMARCHITECTURE,USESMULTITHREADINGTOIMPLEMENTSERVERSPARALLELPROCESSING,USESODBCINTERFACETOACCESSTOSQLSERVERDATABASETODESIGNDATAMANAGEMENTMODULE,USESJ2SEJAVA2STANDARDEDITIONANDOBJECTORIENTEDPROGRAMMINGLANGUAGE,JAVA,TODEVELOPTHESYSTEMTHISSYSTEMISDESIGNEDBYOBJECTORIENTEDANDMODULARDESIGNMETHOD,WHICHUSEDCOMPUTERTECHNOLOGIESBASEDONNETWORKCOMMUNICATIONTECHNOLOGY,DATABASETECHNOLOGY,MULTITHREADINGTECHNOLOGY,SOFTWAREREUSEANDSOON,THISSYSTEMHASBASICFUNCTIONSOFNETWORKCOMMUNICATION,ANDHASFEATURESOFINSTANTINMYDISSERTATION,WEWILLDISCUSSTHESTATUSANDDEVELOPMENTOFNETWORKINSTANTMESSENGER,ANDRESEARCHINTHERELEVANTTECHNOLOGYBACKGROUNDAFTERTHATWEWILLANALYSETHEREQUIREMENTOFTHESYSTEMWITHTHEREQUIREMENTANALYSIS,WEWILLMAKETHEGENERALDESIGNANDDETAILEDDESIGN,SUCHASSERVERDESIGN,DATABASEDESIGNANDCLIENTDESIGNINTHELASTPART,WEWILLIMPLEMENTTHESYSTEMANDPUTITINTOPRACTICETHESYSTEMHASCOMPLETEDTHEFOLLOWINGMAJORFUNCTIONS1SERVERSTARTUP,SURVEILLANCEANDSENDSYSTEMICMESSAGE2USERMANAGEMENTREGISTRATIONLOGINANDLOGOUT3FRIENDMANAGEMENTFIND,ADDANDDELETE4COMMUNICATIONSENDINGMESSAGE,RECERIVINGMESSAGEANDRECEIVINGSYSTEMMESSAGE5ONLINEANDHIDEKEYWORDSINSTANTMESSENGER,C/STHREELAYERCONSTRUCTION,TCP/IP,J2SEPLATFORM目录摘要ABSTRACT目录第一章绪论11选题背景111即时消息系统的研究现状112即时消息系统的发展趋势113论文研究的主要内容12技术背景121C/S模型122TCP/IP协议123编程技术第二章系统分析与设计21需求分析22系统总体框架221总体设计222功能模块23系统详细设计231多线程设计232数据库设计233服务器的设计234客户端的设计235消息通信的设计第三章系统实现31数据库部署311建立数据库312配置ODBC数据源32开发环境321构建JAVASE平台322安装开发工具ECLIPSE33服务器端的实现331启动服务器后台333发送系统消息34客户端的实现341用户注册342登录343程序主界面343添加好友344上线与隐身345聊天通信第四章总结参考文献致谢第一章绪论11选题背景111即时消息系统的研究现状即时消息系统1INSTANTMESSENGER,IM是一种在后PC时代兴起的,以INTERNET网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。即时消息系统产生有着深刻的社会原因人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。国内最为流行的即时消息软件是OICQ(简称QQ)。它以良好的中文界面和不断增强的功能形成了一定的QQ网络文化。该软件是由腾讯公司于1999年2月自主开发的基于INTERNET的即时消息系统。腾讯QQ目前已成为中国最主要的即时消息服务网络软件。作为一种即时消息工具,QQ支持显示好友在线、即时传送文字、语音和文件等功能。QQ还与无线寻呼、GSM短信息、IP电话网互联,为用户提供互联网短信及信息增值服务。腾讯QQ开发和拓展统一、高速、丰富的互联网应用平台、在线广告业务、移动通信业务、ISP及IP电话合作业务、企业商用即时消息服务、在线客户支持及在线呼叫业务。112即时消息系统的发展趋势21世纪将是网络化、信息化的世纪,信息的融合已经成为社会发展的主流方向2。即时消息系统将不断与信息交流领域的系统相互集成和渗透,扩展其自己的功能和应用范围,满足未来话音,数据和视频的多媒体应用需要,使即时消息以更丰富的接入方法,更高的服务质量,更友好的面貌呈现在世人的面前。从功能角度来看,即时消息系统向支持全媒体方向发展,随着多媒体技术在网络应用中的发展,即时消息系统承载的媒体,不再局限于原来的文字、语音和文件的信息交换,信息载体扩展到图形、图像和流媒体等多媒体业务上。目前ICQ和QQ预设了部分简单的表情图像,通过传输图像代码来传递表情图像,可以被视为即时消息开发商开发支持图形、图像为载体的即时消息软件的开端。从应用范围角度来看,即时消息系统集中在INTERNET个人用户之间的信息交流应用,随着网络技术应用的发展,即时消息系统应用范围向园区化、集团化拓展,应用领域突破个人,而用于远程教学、远程医疗、远程演示、网络会议等领域。113论文研究的主要内容本论文的主要工作是利用编程技术建立一基于J2SE的即时消息系统,主要实现网络即时聊天功能。在建立这个系统的过程中,我将会研究JAVA语言,多线程编程、网络编程以及数据据等方面的知识。在我的论文中,我将会研究即时消息的发展,并针对不同即时消息工具之间不能互通的弊端,介绍即时消息系统中的应用。为了更好地实现系统,我们还要研究J2SE技术。在论文中介绍了J2SE的体系结构、系统设计以及J2SE的开发环境。熟悉了开发平台,我们还要了解基于TCP/IP的SOCKET网络连接的基础知识,包括网络通信系统架构及SOCKET通信在该系统中的应用等内容。在论文中将着重介绍网络即时消息系统的设计和实现,包括界面及各个功能模块的设计,给出了相应的流程图并对其功能做了详细描述,最终实现了客户端之间的即时聊天通信功能。最后是结尾部分,对本文做了总结并针对该系统提出了一些不足和今后需要改进的地方。12技术背景121C/S模型在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网3,CLIENT/SERVER。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。这里客户和服务器都是指通信中所涉及的两个应用进程(软件)。使用计算机的人是计算机的“用户”(USER)而不是“客户”(CLIENT)。但在许多国外文献中,也经常把运行客户程序的机器称为CLIENT(这种情况下也可把CLIENT译为“客户机”),把运行服务器程序的机器称为SERVER。所以有时要根据上下文判断CLIENT与SERVER是指软件还是硬件。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到CLIENT端和SERVER端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是CLIENT/SERVER形式的两层结构,由于现在的软件应用系统正在向分布式的WEB应用发展,WEB和CLIENT/SERVER应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。122TCP/IP协议1IP网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议4。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IPSOURCEROUTING,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。2TCP如果IP数据包中有已经封好的TCP数据包5,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如TELNET的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如TELNET、FTP、RLOGIN、XWINDOWS和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。3UDPUDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询应答的服务,例如NFS。相对于FTP或TELNET,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。4TCP与UDP的端口结构TCP和UDP服务通常有一个客户/服务器的关系,例如,一个TELNET服务进程开始在系统上处于空闲状态,等待着连接。用户使用TELNET客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。两个系统间的多重TELNET连接是如何相互确认并协调一致呢TCP或UDP连接唯一地使用每个信息中的如下四项进行确认源IP地址发送包的IP地址目的IP地址接收包的IP地址源端口源系统上的连接的端口目的端口目的系统上的连接的端口。端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、XWINDOWS使用6000。这些端口号是广为人知的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯123编程技术1JAVA语言JAVA6是由SUNMICROSYSTEMS公司于1995年5月推出的JAVA程序设计语言(以下简称JAVA语言)和JAVA平台的总称。用JAVA实现的HOTJAVA浏览器(支持JAVAAPPLET)显示了JAVA的魅力跨平台、动态的WEB、INTERNET计算。从此,JAVA被广泛接受并推动了WEB的迅速发展,常用的浏览器现在均支持JAVAAPPLET。另一方面,JAVA技术也不断更新。JAVA语言的优良特性使得JAVA应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。JAVA对对象技术的全面支持和JAVA平台内嵌的API7能缩短应用系统的开发时间并降低成本。JAVA的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是JAVA企业应用编程接口(JAVAENTERPRISEAPIS)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。2WINSOCKWINDOWS下网络编程的规范WINDOWSSOCKETS是WINDOWS下得到广泛应用的、开放的、支持多种协议的网络编程接口。通信的基础是套接口(SOCKET),一个套接口是通讯的一端。在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接口都有它的类型和与其相关的进程。套接口存在于通讯域中。通讯域是为了处理一般的线程通过套接口通讯而引进的一种抽象概念。在一次网络通信/连接中有以下几个参数需要被设置本地IP地址本地端口号对方端口号对方IP地址。左边两部分称为一个半关联,当与右边两部分建立连接后就称为一个全关联。在这个全关联的套接口上可以双向的交换数据。如果是使用无连接的通信则只需要建立一个半关联,在发送和接收时指明另一半的参数就可以了,所以可以说无连接的通信是将数据发送到另一台主机的指定端口。此外不论是有连接还是无连接的通信都不需要双方的端口号相同。SOCKET接口是访问INTERNET使用得最广泛的方法。3多线程编程多线程8是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。使用线程的好处有以下几点使用线程可以把占据长时间的程序中的任务放到后台去处理用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度程序的运行速度可能加快在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。多线程在JAVA里面的应用也是很广泛。JAVA对多线程的支持是非常强大的,他屏蔽掉了许多的技术细节,让我们可以轻松的开发多线程的应用程序。124开发平台1J2SE平台JAVA2平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。J2SE,J2ME和J2EE,这也就是SUNONEOPENNETENVIRONMENT体系。J2SE就是JAVA2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是JAVA2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。STANDARDEDITION标准版J2SE包含那些构成JAVA语言核心的类。比如数据库连接、接口定义、输入/输出、网络编程定位在客户端,主要用于桌面应用软件的编程。J2SE包含那些构成JAVA语言核心的类。比如数据库连接、接口定义、输入/输出、网络编程2SQLSERVER数据库SQLSERVER20009的特性MICROSOFTSQLSERVER2000的特性包括INTERNET集成。SQLSERVER2000数据库引擎提供完整的XML支持。它还具有构成最大的WEB站点的数据存储组件所需的可伸缩性、可用性和安全功能。SQLSERVER2000程序设计模型与WINDOWSDNA构架集成,用以开发WEB应用程序,并且SQLSERVER2000支持ENGLISHQUERY和MICROSOFT搜索服务等功能,在WEB应用程序中包含了用户友好的查询和强大的搜索功能。可伸缩性和可用性。同一个数据库引擎可以在不同的平台上使用,从运行MICROSOFTWINDOWS98的便携式电脑,到运行MICROSOFTWINDOWS2000数据中心版的大型多处理器服务器。SQLSERVER2000企业版支持联合服务器、索引视图和大型内存支持等功能,使其得以升级到最大WEB站点所需的性能级别。企业级数据库功能。SQLSERVER2000关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。SQLSERVER2000分布式查询使您得以引用来自不同数据源的数据,就好象这些数据是SQLSERVER2000数据库的一部分,同时分布式事务支持充分保护任何分布式数据更新的完整性。复制同样使您得以维护多个数据复本,同时确保单独的数据复本保持同步。可将一组数据复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器。易于安装、部署和使用。SQLSERVER2000中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用SQLSERVER的过程。SQLSERVER2000还支持基于标准的、与WINDOWSDNA集成的程序设计模型,使SQLSERVER数据库和数据仓库的使用成为生成强大的可伸缩系统的无缝部分。这些功能使您得以快速交付SQLSERVER应用程序,使客户只需最少的安装和管理开销即可实现这些应用程序。第二章系统分析与设计21需求分析此次开发的网络聊天工具可作为个人的交流工具使用,通信的安全性不是很高,但要求信息的响应速度要较快,让用户充分享受到网络即时消息的方便和快捷。本聊天工具由服务器端程序和客户端程序两部分组成,整体采用JAVA平台开发,并使用SQLSERVER2000管理数据库数据。服务器是可以监听和查看用户的基本操作;客户端程序面向实际用户,它有必要的界面的按钮,向用户提供网络即时消息的功能本聊天需包含如下基本功能1客户端1新用户注册;2用户登录验证;3获取好友列表并显示好友状态(在线/不在线);4添加用户好友;5删除用户好友;6用户与好友聊天(可查看聊天记录);7接收系统信息。2服务端1启动和关闭后台服务器;2查看客户端登录的相关信息(客户端登陆时间/登陆IP);3向所有在线用户发送系统消息。22系统总体框架221总体设计网络即时通讯系统采用客户机/服务器(C/S)的模式来设计,是一个3层的C/S结构数据库服务器应用程序服务器端应用程序客户端。系统采用C/S结构,可以将任务合理分配到客户机端和服务器端,从而降低了系统的通信开销,如图31所示图31C/S体系结构1客户层客户层也叫应用层,是应用程序的用户接口部分。给聊天工具设计一个客户层具有很多优点,这是因为客户层担负着用户与应用间的对话功能。它用于检查用户的输入数据,显示应用的输出数据。为了使用户能直观地进行操作,客户层需要合作图形用户接口。若聊天用户变更,系统只需要改写显示控制和数据检查程序即可,而不影响其他两层。数据检查的内容限于数据的形式和值的范围,不包括有关业务本身的处理逻辑。2服务层服务层也叫功能层,相当于应用的本体,它是将具体的业务处理逻辑编入程序中。例如,用户需要检索数据,系统设法将有关检索要求的信息一次性地传送给功能层而用户登录后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。在应用设计中,必须避免表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。3数据层据层就是DBMS,本系统使用了MICROSOFT公司的SQLSERVER2000数据库服务器来管理数据。SQLSERVER2000能迅速执行大量数据的更新和检索。因此,从功能层传送到数据层的“要求”一般都使用SQL语言。222功能模块聊天工具按如下过程完成通信客户向服务器注册,告知服务器它在监听某主题;客户注册之后,向服务器发送消息;服务器再把消息发送给所有监听些主题的客户。聊天工具由服务器端和客户端组成,要分析清楚两方面所要完成的任务,对设计来说,等于完成了一半。根据聊天的通信步骤,系统的功能模块如图32所示即时消息系统服务器端客户端后台操作建立连接监听客户请求用户登录消息用户管理好友管理聊天功能用户登录用户注册查找好友添加好友删除好友发送消息接收消息聊天记录数据库操作发送系统消息消息管理图32功能模块1服务器端服务器完成5大功能建立连接、监听客户请求、操作数据库、查看用户登录消息和发送系统消息这5大功能的具体含义如下建立连接系统启动时建立一个SERVERSOCKET连接,绑定本地计算机的一个端口,不断侦听是否有客户端连接或者断开连接。监听客户请求服务器端是一个信息的枢纽,所有客户端的信息都要传到服务器端,再由服务器根据要求分发出去,客户端在向服务器发送各种请求,如上线、隐身、获取我的好友、查找好友等等。数据库操作当客户机向服务器发送请求时,服务器需要通过数据库管理软件对数据库的数据进行增、删和查询。如录入用户信息、修改用户信息、查找好友数据库的资料以及添加好友数据到数据库等。用户登录消息在服务器端的界面上,我们可以看到用户的登录消息,包括IP地址、端口号,登录时间等。发送系统消息在客户端管理界面上,可以输入消息,并发送给所有的在线用户。2客户端客户端完成3大功能用户管理、好友管理和聊天功能,这些功能的含义如下用户管理此功能又包括2个子功能,用户登录和用户注册。客户端与服务器端建立通信通道,向服务器发送新建用户的信息,接收来自服务器听信息进行注册。注册完毕后,可以通过系统的登录界面,输入账号和密码,然后发送到服务器进行验证。如果验证通过,则打开程序的主界面。好友管理此功能又包括3个子功能,查找好友、添加好友和删除好友。在程序的主界面,提供查找好友的功能。查找好友时,客户端向服务器发送查找好友请求,服务器端返回在线用户的信息,此时我们可以通过此来进行添加好友,并跟好友通过通信连接。聊天功能客户端在与好友端建立通信连接后,便可以与好友进行聊天,聊天时发送的是文本信息,好友端在接收到聊天消息后,会提示收到消息,并由好友端自主打开消息接收界面。所有的聊天消息都会被保存起来,可以查看与每个好友的聊天记录。聊天记录包括内容和时间。23系统详细设计231多线程设计1服务器端的多线程服务器需要和多个客户端同时进行通信,这就是服务器端的多线程。一旦服务器发现一个新的客户端与之建立了连接,就马上新建一个线程与客户端进行通信。用多线程的好处在于可以同时处理多个通信连接,不会出于由于数据排队而发生的延迟或者丢失,可以很好利用系统的性能。服务器为每个连接着的客户建立一个线程,为了同时响应多个客户端,需设计一个主线程来启动服务器端的多线程。主线程与进程结构类似,它在获得新连接时生成一个线程来处理这个这个连接。线程调度速度快,占用资源少,可共享进程空间中的数据,因此服务器的响应速度较快,且I/O吞吐量较大。在程序的代码里面,服务器端的多线程类定义为CLASSSERVERTHREADEXTENDSTHREAD/略2客户端的多线程客户端能够完成信息的接收和发送操作,这与服务器的多线程概念不同,可以采用循环等待的方法来实现客户端。利用循环等待的方式,客户端首先接收用户输入的内容并将它们发送到服务器端,然后接收来自服务器端的信息,将其返回给客户端的用户。在程序的代码里面,客户端的多线程定义为CLASSMAINWINEXTENDSJFRAMEIMPLEMENTSRUNNABLE/略;232数据库设计数据库表主要用来存放用户的注册信息和用户的好友资料,可利用两张数据表用来存放用户信息和用户好友资料。在SQLSERVER2000上新建名为JAVAICQ的数据库,并建立两张数据库表用户的基本信息表(表名ICQ)和用户好友数据库表(表名FRIEND)1ICQ表ICQ表存放用户信息,包括用户的号码(ICQNO)、昵称NICKNAME、密码PASSWORD、在线是否STATUS、IP地址IP、资料INFO、头像号PIC、性别SEX、EMAILEMAIL和籍贯PLACE等信息。利用SQLSERVER2000建立数据表,如表31所示表31用户信息表字段数据类型说明ICQNOINT用户的账号NICKNAMECHAR用户的昵称PASSWORDCHAR登录密码SATUSBIT在线是否IPCHAR登录的客户端IP地址PLACECHAR籍贯PICINT用户的头像对应的号码SEXCHAR性别EMAILCHAR电子邮件INFOCHAR用户的个性说明2FRIND表FRIEND表的设计比较简单,本系统设计了用户的号码和好友的号码两个字段。利用SQLSERVER2000建立如下数据表表32好友信息表字段数据类型说明ICQNOCHAR用户的账号FRIENDCHAR好友的账号233服务器的设计1主服务器类的设计主服务器实现了服务器的多线程,服务器端有一个进程(或多个进程)在指定的端口等待客户的连接信息。一时连接成功,就可以按设计的数据交换方法和格式进行数据传输。客户端只在需要的时候向服务端发出连接请求。主服务器类调用SERVERTHREAD类,而每个SERVERTHREAD实体就是一个单独的线程,即对应于客户端连接请求响应的线程。它的执行过程如下使用SERVERSOCKETSNEWSERVERSOCKET8000语句绑定8000端口创建套接口使用SOCKETSACCEPT来监听用户的请求使用NEWSERVERTHREADSOCKET语句创建新的线程。2SERVERTHREAD类的设计客户端发送连接请求的时候,服务器端创建一个SERVERTHREADSOCKET线程。SERVERTHREAD类的函数执行过程可描述如下执行SERVERTHREADZSOCKETS线程构造函数执行SOCKETS取得传递参数;BUFFEREDREADERNEWINPUTSTREAMREADERSOCKETGETINPUTSTREAM创建输入流;使用PRINTWRITERNEWBUFFEREDWRITERNEWOUTPUTSTREAMWRITERSOCKETGETOOUTPUTSTREAM创建输出流;使用START函数启动线程;最后使用RUN线程监听函数。3登录验证(1)登录线程如果客户端输入的字符串“LOGIN”,表示需要登录,那么服务器在接收到该信息后连接数据库,准备从数据库选择昵称和密码。服务器接收到客户端发送过来的号码和密码信息后,设定数据库查寻条件,并执行数据库查寻,通过比较输入的用户名和密码和数据库信息来确定用户的登录是否成功,如果成功就,发送“OK”给客户端,通知其进入聊天主界面反之发送“FALSE”,提示用户登录失败,如图33所示客户端服务器端SOCKET读取数据库,并验证账号与密码发送“LOGIN”接收账号和密码接收“LOGIN”监听用户请求发送账号和密码SERVESOCKET接收“OK”发送“OK”打开程序主界面把IP地址和在线状态录入数据库数据库结束通知好友图33登录流程(2)通知好友通知好友也是在SERVERTHREAD类的RUN函数里面,当某一用户成功登录后,发送“GETWHOADDME”到服务器端,服务器端查找数据库中的“FRIEND”数据表,并把用户的所有好友消息及在线状态发送回客户端,客户端通过这些好友的消息,向在线的好友发送上线通知。4新建用户用户新建过程也在线程监听函数RUN中。当服务器端收到客户端发送的“NEW”请求时,服务器端开始进行新建用户操作。新建用户的过程是这样的首先要使用权CLASSFORNAME方法加载数据库驱动类,该类的描述是SUNJDBCODBCJDBCODBCDRIVER;然后使用DRIVERMANAGERGETCONNECTION方法连接数据,数据库名为JDBCODBCJAVAICQ最后服务器接收客户端用户发送的昵称、密码、用户EMAIL,个人资料、籍贯和头像等信息,执行数据库添加操作完成用户的创建。服务器为新建的用户指定唯一的注册号码,将以即时消息的方法发送给用户。5好友处理1查找好友当客户端向服务器查找好友的请求后,服务器立即响应并调CLASSFORNAME方法加载数据库驱动类SUNJDBCODBCJDBCODBCDRIVER,然后调用方法DRIVERMANAGERGETCONNECTION完成数据库的连接,得到用户好友查询的结果。查询结果包括好友的昵称、性别、性别、籍贯、个人资料等信息。服务器对数据库听查询结果进行筛选,只向客户端的用户返回好友的注册号码、头像信息号以及是否在线信息。客户端接收到查询结果后,利用相应的函数将其显示出来。2添加好友读取资料功能是在查找好友功能基础上建立的。用户得到好友列表后,可根据需要读取好友的详细资料,也可读取用户自己的详细资料。服务器使用VECTOR矢量保存客户端用户的好友号码,并返回好友的昵称、号码、IP地址、状态、头像和个人资料等信息。3添加好友服务器响应客户端用户的请求后,首先连接数据库,并根据接收的用户号码及好友号码向好友表添加记录。服务器使用R6保存查询结果。若R6为1,则表明添加好友成功,服务器将给客户端发出“OKADDFRIEND”的消息;否则添加好友失败,服务器将给客户端发出“FALSEADDFRIEND”的消息。4添加好友应答如果服务器收到其它用户添加我为好友的请求后,连接数据库,根据接收用户号码及好友号码向好友表添加记录。若添加成功,则向用户传递好友的基本信息,比如昵称。服务器利用R5保存处理结果,并向客户端输出结果。5删除好友当服务器接受到客户端删除好友请求后,它连接数据库,并根据接收的用户号码及好友号码表记录删除。服务器利用R7保存删除结果,若R7为1,则删除成功,服务器给客户端发出“OKDELFRIEND”的消息;否则删除好友失败,服务器给客户端发出“FALSEDELFRIEND”的消息。接收好友处理请求ADDNEWFRIENDDELFRIENDADDFRIENDFRIENDFIND查找好友读取好友资料添加好友添加好友应答删除好友YESNOYESYESYESYESNONONO返回图34处理好友请求6退出下线用户在线时,数据库表的IP地址字段为此时用户计算机的真实IP地址;状态字段为1。若用户退出下线,客户端向服务器端发送“LOGOUT”,服务器接收到下线请求时,需完成修改IP字段和状态字段。服务器首先利用CLASSFORNAME方法加载数据库驱动类SUNJDBCODBCJDBCODBCDRIVER;然后通过方法DRIVERMANAGERGETCONNECTION连接数据库存;最后根据用户号码,将其状态字段设为0,IP地址字段设为空。234客户端的设计客户通过SOCKET与服务器建立连接。服务器与客户都通过构造BUFFEREDREADER、PRINTWRITER来建立输入/输出流,双方通过该输入/输出流来相互传递信息。一旦收到客户方的连接请求,服务器利用ACCEPT函数返回一个新建的SOCKET对象,随后客户端向服务器发送消息,诸如注册、登录和查找好友等请求,服务器收到请求后,针对不同的消息处理请求。在这一过程中,服务器端与客户端采用UDP协议通信。虽然UDP协议不可靠,但对于聊天工具而言,其可靠性并不太重要。1用户注册当服务器收到用户的注册请求后,开始接收客户传递的消息,诸如客户的昵称、性别、籍贯、头像和个人资料等信息。接收完毕后,服务器便通过JDBCODBC与后台数据库连接,向数据库添加记录。若新用户注册,则向客户返回号码,并在数据库中注册用户的IP地址,设定STATUS值告知用户在线。客户收到服务器返回的消息后,打开主程序窗口,同时创建UDP以便在用户之间建立联系。注册通信过程如图35所示SOCKET接收完毕发送“NEW”发送完毕接收注册信息接收“NEW”监听用户请求发送注册信息SERVESOCKET接收账号输出账号打开登录界面结束数据库操作客户端正服务器端图35注册流程2用户登录用户在客户端程序中输入用户号码与密码,与服务器建立连接,向服务器发送登录请求。服务器收到该请求后,通过JDBCODBC读取数据库,与用户输入的消息做比较若用户输入的信息与数据库信息相同,则服务器向客户返回成功消息,将其STATUS字段设为1,并注册用户当前的IP地址;否则服务器向客户返回失败消息。客户端收到服务器的成功确认后,打开聊天主窗口;否则弹出失败信息。客户端事件驱动与服务器端的事件监听相对应。3服务器连接服务器连接是在CONNECTSERVER函数中实现的。本函数用到了具有连接性、有序性特点的流,根据服务器的IP地址和端口来完成客户端与服务器的连接。IP地址是网络中唯一地址的标识。服务器连接过程分服务器端与客户端两部分,执行流程如下(1)服务器程序流程程序初始化;填写本机地址信息;绑定并监听一个固定的端口;收到CLIENT的连接后建立一个SOCKET连接;产生一个新的进程与CLIENT进行通信和信息处理;子通信结束后中断与CLIENT的连接。(2)客户端程序流程程序初始化;填写服务器地址消息;连接服务器;与服务器通信和信息处理;通信结束后断开连接。4主程序设计用户完成登录后,客户端与服务器端建立连接。连接建立成功后,客户向服务器请求读取好友名单;服务器收到该请求,开始读取数据库中的FRIEND表并得到好友的号码,再通过JCQ表读取好友资料,向客户端发送这些信息;客户收到服务器消息后,在主窗口显示好友。客户端还建立矢量来存储好友的昵称、号码,头像编号和IP地址等信息。5好友管理(1)查找好友好友查找可利用FINDFRIEND2类完成,FINDFRIEND2类继承自JFRAME类。FINDFRIEND2中定义的界面控件包括好友的昵称、性别、住址、JICQ号码、IP地址、在线状态、头像、电子邮件和个人留言等信息。查找好友所需的网络变量定义如下SOCKETSOCKET连接SOCKETBUFFEREDREADERIN读入缓冲区PRINTWRITEROUT输入缓冲区INTMYID用户的号码STRINGSERVERHOST发送端的主机地址INTSERVPORT服务端的主机地址DATAGRAMPACKETSENDPACKET存储发送信息的发送数据报DATAGRAMSOCKETSENDSOCKET存储接收信息的接收数据报INTSENDPORT发送的端口号(2)添加好友用户添加好友是聊天工具的基本功能之一。添加好友的基本步骤如下用户A登录后,向服务器发送查找请求,服务器响应并读取数据库表ICQ,将结果返回给用户;用户在收到查询结果后选择用户B,向服务器发送添加好友请求,服务器收到请求响应,更新数据表FRRIEND,并从ICQ表中读取好友基本信息,将信息返回给用户A;用户A的客户端主窗口显示用户B,并通过UDP通知用户B;用户B收到服务器的确认消息,可决定是否添加用户A为好友。(3)删除好友用户可以删除好友列表中指定的好友,客户端确认用户操作后向服务器发送删除请求,服务器收到该请求,连接数据库表FRIEND并删除用户及该好友的记录。若删除成功,则向客户端返回成功消息,通知用户。235消息通信的设计消息的发送主要是通过数据报服务来实现的。JAVA实现数据报通信的过程除面向连接的SOCKET外,还有无连接的数据报SOCKET。数据报是网络层数据单元在介质上传输信息的逻辑分组格式,它是是一种在网络中传播的、独立的自身包含地址信息的消息,它能否到过目的地,到过的时间,到过内容是否变化是不能准确知道的。数据报的通信双方不需要建立连接,对于像聊天通信这些不需要很高质量的应用程序来说,数据报通信是一个非常好的选择。1、使用数据报在JAVA的JAVANET包中有两个类DATAGRAMSOCKET和DATAGRAMPACKET,它们为应用程序采用数据报通信方式进行网络通信提供了支持。其定义定义如下DATAGRAMPACKETSENDPACKET,RECEIVEPACKETDATAGRAMSOCKETSENDSOCKET,RECEIVESOCKETINTUDPPORT5001INTSENDPORT5000SENDSOCKETNEWDATAGRAMSOCKETRECEIVESOCKETNEWDATAGRAMSOCKETUDPPORT2、发送消息用户通过好友列表中好友的IP地址,利用UDP协议与其他用户进行信息交流。消息发送之前先创建一个数据报文包,用来实现无连接的包传送服务。每个数据报文包是用DATAGRAMPACKET类来创建的,DATAGRAMPACKET对象封装了数据报包数据、包长度、目标地址和目标端口。若客户端发送数据包,则构造函数创建DATAGRAMPACKET对象,将需要发送的数据和包文目的地址信息放入对象之中。在发送的过程中利用构造函数DATAGRAMPACKET(BYTEBUFFEREDARRAY,INTLENGTH,INETADDRESSADDRESS,INTPORT)构造一个包长度为LENGTH的包,它是将数据传送到指定端口号上的数据包,参数LENGTH必须小于等于BUFFEREDARRYLENGTH消息发送是通过调用DATAGRAMPACKET对象中有SEND方法实现的,它需要以DATAGRAMPACKET对象为参数,将刚才封装进DATAGRAMPACKET对象中的数据组成数据报发出。发送数据报文包的部分代码如下SENDPACKETNEWDATAGRAMPACKETDATA,DATALENGTH,INETADDRESSGETBYNAMETHEIPTRIM,SENDPORTSENDSOCKETSENDSENDPACKET/DATA为数据报文包,DATALENGTH为数据报文包的长度INETADDRESSGETBYNAMETHEIPTRIM为获取接收者的IP地址SENDPORT为数据报文包接收者的接收端口。/发送消息流程如下图所示从输入消息对话框读取信息获取好友的IP地址在线不发送消息结束是否保存聊天记录图36发送消息3监听好友的消息为了监听好友的消息,系统首先定义一个数组,该数组用于接收用户消息中的数据;然后创建数据报,使用RECEIVESOCKETRECERIVERECEIVEPACKET函数等待并接收数据报,取得数据报中的数据。接收数据报文包的部分代码如下RECEIVEPACKETNEWDATAGRAMPACKETARRAY,ARRAYLENGTHRECEIVESOCKETRECEIVERECEIVEPACKETBYTEDATARECEIVEPACKETGETDATASTRINGINFOFROMIPRECEIVEPACKETGETADDRESSGETHOSTADDRESSTOSTRINGTRIMRECEIVEDNEWSTRINGDATA,0,DATALENGTH/其中RECEIVEPACKET用来接收其它客户端发送过来的数据报文包;DATA用来储存数据报文包的数据;INFOFROMIP用来获取数据报文包的发送地址;RECEIVED用于储存二进制类型数据转换为字符串类型后数据。/监听好友消息的流程如图37所示接收数据报信息ADDNEWFRIENDSYSTEMONEADDYOUOFFLINEONELINE好友上线好友下线添加好友应答添加好友应答接收系统消息YESNOYESYESYESYESNONONO查找对应好友及其登记IPIP存在接收好友消息接收陌生人消息ELSE图37监听好友消息(1)当接收好友消息时,主程序弹出一个对话框,由用户自行选择接收信息与否,用户可根据消息提示,打开相应好友的接收消息对话框来接收消息。DATAGRAMPACKET类提供了4个函数来获得消息PUBLICBYEGETDATE返回一个字节数组,包含收到或要发送的数据报中的数据;PUBLICINTGETLENGTH返回发送或收到的数据的长度;PUBLICINETADDRESSGETADDRESS返回一个发送或接收此数据报报文的机器的IP地址;PUBLICINTGETPORT返回发送或接收数据报的远程主机的端口号。接收消息的流程图38所示监听到好友发送过来的消息打开接收消息对话框,接收消息。接收不保存聊天记录结束是否图38接收消息(2)上线和隐身当用户想处于非聊天状态的时候,可以切换至隐身状态。这时候,用户的客户端会查找所有在线的好友,并发制作数据包,发送“隐身”要求给所有好友的客户端。在好友的程序界面上,用户的头像由彩色变成黑白。此时,所有好友都无法发送消息给此用户。当用户想点击程序界面的“上线”按钮时,既可通知所有的好友此用户上线了。第三章系统实现31数据库部署311建立数据库本系统使用的数据库管理系统为微软公司开发的SQLSERVER2000。服务器所在的计算机上安装此工具。安装好之后,打开SQLSERVER的“企业管理”,可通过可视化操作,建立一个名为“JAVAICQ”的数据库,并在在此数据库中,建立两张数据表,第一张表名为“ICQ”,用来储存用户基本信息;第二张表名为“FRIEND”,用于储存用户的好友信息。

温馨提示

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

评论

0/150

提交评论