版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、毕业设计设计题目: 学生姓名: 学院名称: 专业名称: 班级名称: 学 号: 指导教师: 教师职称: 学 历: 目 录1 前言51.1 课题选题背景51.2需求分析51.3系统设计的要点62 涉及的相关技术及协议62.1 Java语言62.2 C/S模式介绍73 系统需求分析83.1可行性分析83.2 系统功能需求83.3 系统性能需求83.4 即时信息加密和鉴别93.5 即时通讯系统需求94 系统设计94.1即时聊天系统的实施原理104.2软件设计流程114.3功能模块划分114.4 数据库概要设计125 详细设计135.1 服务器端的设计与实现135.1.2 主服务器类的设计135.1.2
2、 登录验证模块155.1.3 注册处理模块155.2 客户端的设计与实现165.2.1 用户注册模块165.2.2 用户登录175.2.3 在线用户显示设计185.2.4 聊天信息发送与接收195.3 数据库设计206 结论21致谢23参考文献24附录25基于Java即时聊天系统的设计与实现摘要: 网络络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。前者通过Socket套接字建立服务器,
3、服务器能读取、转发客户端发来信息,并能刷新用户列表。后者通过与服务器建立连接,来进行客户端与客户端的信息交流。其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该聊天工具采用Eclipse为基本开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修
4、正和改进,直到形成可行系统关键词:即时通讯系统 B/S C/S MySQL Socket SwingAbstract: The rapid development of computer network technology today, more immediate means of communication by people of all ages. Real-time chat tool in achieving the transmission of video and audio i
5、nformation, so that members can collaborate remotely intuitive, real audio and visual communication at the same time, use of multimedia technology, it can also help users to work in all kinds of information processing. Study of this issue is to support the exchange of internal network systems - netw
6、ork instant messaging system. The system uses Java programming language. System uses the C / S structure mode, support for LAN and Internet. The system uses the waterfall model of software development projects were discussed system requirements analysis, outline design, detailed design and coding, a
7、nd run and test the whole system. Finally, the paper concluded. Keywords:Instant Messager; System; B/S C/S MYSQL Socket Swing1 前言目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为Live Messenger)以及跨平台Gaim等。本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。1.1 课题选题背景随着计算机网络技术的发展,网络聊天工具已经成为人们日常交流的一种重要工具。它通
8、信速度快,成本低,更重要的是方便人们信息的交流和资料的传递,所以开发一个易于操作并拥有友好界面的聊天工具可以较好地解决现实生活中通信费用高昂以及电话的单线程通信等问题1。QQ聊天系统是一款基于互联网的即时通信系统,它允许人们利用英特网技术实时地传送信息,并且能让用户选择性地接受或拒绝其他用户的信息。由于QQ有着出色的通信性能并且其用户普及度较高,因此本课题在模仿QQ的前提下,设计了一款具有聊天功能及其他附加功能的软件目前即时聊天系统种类众多,功能也较为齐全。该课题现在所研究的即时通讯系统,其目标是定位于企业内部网络,解决企业或单位的沟通及协同的问题,提高工作效率。企业内部员工可以利用该通讯系统
9、随时随地发送文字消息、进行多人群聊、消息群发、传送文件、音频视频对话等。系统包括客户端程序和服务器端程序,支持局域网和Internet。企业内部员工之间可以在内部网覆盖的任何地点、任何时间进行即时交流,真正实现企业内部协同工作。使您不必花费大量的时间、金钱聚集到一个地方,通过网络,就能实现面对面的沟通,提高了效率。MSN、QQ等公共消息系统,由于聊天对象及内容的不可控,若在企业内部使用,可能会降低工作效率。而该即时通讯系统将自己的服务器端安装在企业内,并且人员的创建是由系统管理员来完成,因此很好的解决了这个问题。随着计算机网络技术的发展,网络聊天工具已经成为人们日常交流的一种重要工具。它通信速
10、度快,成本低,更重要的是方便人们信息的交流和资料的传递,所以开发一个易于操作并拥有友好界面的聊天工具可以较好地解决现实生活中通信费用高昂以及电话的单线程通信等问题1。QQ聊天系统是一款基于互联网的即时通信系统,它允许人们利用英特网技术实时地传送信息,并且能让用户选择性地接受或拒绝其他用户的信息。由于QQ有着出色的通信性能并且其用户普及度较高,因此本课题在模仿QQ的前提下,设计了一款具有聊天功能及其他附加功能的软件1.2需求分析聊天系统最重要的是服务器端和客户端两个方面。服务器端有两个主要任务:(1)服务器端应当建立一个ServerSocket,并且不断进行监听,判断是否有客户端连接请求或断开连
11、接。(2)服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息给客户端。客户端要完成的工作:(1)与服务器端建立通信通道,向服务器端发送信息。(2)接收来自服务器的应答信息。解决了上述的4个问题,也就完成了聊天系统的核心任务。1.3系统设计要点聊天系统的设计主要是提供满足用户双方直接进行实时聊天的服务,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:(1)实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,用户通过客户端程序登录到特定服务器,即可与登录在同一服务器上的用户进行交流,这是一个面向连接的通信过程。因此,要在TCP/I
12、P环境下4-5,实现服务器端和客户端两部分程序。(2)服务器端工作流程服务器端通过socket()系统创建一个ServerSocket来对客户端进行接收,并与指定的本地端口绑定bind(),就可以在端口进行监听listen()。Map<String,socket>用以存储用户姓名和对应的Socket。通过ChatRoomServerThread线程类来处理不同请求。如果有客户端连接请求,则给出一个相应的Socket,将客户端地址赋给这个Socket。登录成功的用户就可以在服务器上聊天。(3)客户端工作流程客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个S
13、ocket来发送和接收数据即可。2 涉及的相关技术及协议为了保证课题能正常实施,先来分析一下课题所需要的相关技术和协议。2.1 Java语言经过认真的讨论分析,综合各种计算机高级语言的特征和适应范围,最终决定选择纯面向对象的Java语言来完成毕业论文的设计,下面就技术可行性方面,对Java语言作一简要介绍。Sun公司的口号就是“网络就是计算机”,Java能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。使用Java语言,可以相对轻松的一天编写一个有条理的网络程序。今天,Java的网络功能正在飞跃发展,不断有新的特性增加到这个有价值的基础上,
14、JavaSoft实验室正在不断努力使Java更加完善。就Java语言的主要特点,本人归纳如下:Java程序设计的开发过程与运行环境Java是解释型的高级编程语言,所以Java程序的开发通常需要经过编写源程序、编译生成字节码和运行三个过程。这里要提到,Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码字节码。这一编译过程同C/C+的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却
15、不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。【2】2.2 C/S模式介绍20世纪90年代出现并迅速占据主导地位的一种计算模式为客户机/服务器模式,简称为C/S模式,它实际上就是把主机终端模式中原来全部集中在主机部分的任务一分为二,保留在主机上的部分负责集中处理和汇总运算,成为服务器;而下放到终端的部分负责为用户提供友好的交互界面,称为客户机。【3】相对于以前的模式,C/S模式最大的改进是不再把所有软件都装进一台
16、计算机,而是把应用系统分成两个不同的角色和两个不同的地位:一般在运算能力较强的计算机上安装服务器端程序,而在一般的PC上安装客户机程序。正是由于个人PC机的出现使客户机/服务器模式成为可能,因为PC机具有一定的运算能力,用它代替了上面第一种模式的哑终端后,就可以把主机端的一部分工作放在客户机端完成,从而减轻了主机的负担,也增加了系统对用户的响应速度和响应能力。客户机和服务器之间通过相应的网络协议来进行通讯。客户机向服务器发出数据请求,服务器将数据传送给客户机进行计算,计算完毕,计算结果可返回给服务器。这种模式的优点充分利用了客户机的性能,使计算能力大大提高;另外,由于客户机和服务器之间的通讯是
17、通过网络协议进行的,是一种逻辑的联系,因此物理上在客户机和服务器两端是易于扩充的。C/S模式是目前占主流的网络计算模式。该模式在操作过程中采取的是主动请示方式:首先服务器方要先启动,并根据请示提供相应服务(过程如下):(1)打开一个通信通道同时通知本地主机,服务器愿意在某一个公认地址上接收客户请求。(2)等待某个客户请求到达该端口。(3)接收到重复服务请求,处理该请求并发送应答信号。(4)返回第二步,等待另一客户请求。(5)关闭该服务器。客户端:(1)打开一个通信通道,并连接到服务器所在主机的特定端口。(2)向服务器发送服务请求报文,等待并接收应答;继续提出请求。(3)请求结束后关闭通信通道并
18、终止。分布运算和分布管理是客户机/服务器模式的特点。最后选择了C/S模式。3 系统需求分析前面两章介绍了课题的选题背景和相关的技术基础和协议。在本章中将讨论一下即时通讯系统的需求分析。3.1可行性分析经济可行性:由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。 技术可行性: 本系统的开发利用Microsoft SQL Server2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。学校校园网的建设也为新系统服务器/客
19、户端的结构提供了硬件的支持。使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。 运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。 综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。3.2 系统功能需求本系统主要通过客户端,服务器端来体现聊天系统的基本功能。(1)服务器端 1.处理用
20、户注册 2.处理用户登录 3.处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容 4.处理用户得到信息 5.处理用户退出6. 服务器踢人。7. 保存服务器日志.8.保存用户聊天信息。(2)客户端 1.用户注册界面及结果 2.用户登录界面及结果 3.用户发送信息界面及结果 4.用户得到信息界面及结果 5.用户退出界面及结果3.3 即时消息的安全需求A发送即时消息M给B,有以下几种情况和相关需求:(1)如果无法发送,A必须接到确认;(2)如果M被投递了,B只能接受M一次;(3)协议必须为B提供方法检查A发送了这条信息;(4)协议必须允许B使用另一条即时信息,回复信息;(5)协议必须为A提供方
21、法保证没有其他个体C可以篡改M;3.4 即时信息加密和鉴别(1)协议必须提供方法保证通知和即时消息的置信度,未被监听或者破坏;(2)协议必须提供方法保证通知和即时消息的置信度,未被重排序或者回放;(3)协议必须提供方法保证通知和即时消息被正确的实体阅读;(4)协议必须允许客户自己使用方法确保信息的不被截获,不被重放和解密。3.5 即时通讯系统需求3.5.1 注册需求(1)即时通讯系统拥有多个账户,允许多个用户注册;(2)一个用户可以注册多个ID;(3)注册所使用的帐号类型为字母ID。3.5.2 通讯需求(1)用户可以传输文本消息;(2)用户可以传输RTF格式消息;(3)用户可以加密/解密消息等
22、。4 系统设计在这里我们将该即时通讯系统命名为CHAT,现在对该系统进行总体设计。采用客户机/服务器(C/S)的模式来设计,是一个2层的C/S结构:应用程序服务器应用程序客户端,其分层机构如图1所示。图1 2层C/S结构示意图客户层也叫做应用表示层,也就是我们说的客户端,这是应用程序的用户接口部分。给即时通讯工具设计一个客户层具有很多优点,这是因为客户层担负着用户与应用间的对话功能。它用于检查用户的输入数据,显示应用的输出数据。为了使用户能直接地进行操作,客户层需要使用图形用户接口。若通讯用户变更,系统只需要改写显示控制和数据检查程序就可以了,而不会影响其他两层。服务层又叫做功能层,相当于应用
23、的本体,它是将具体的业务处理逻辑编入程序中。例如,用户需要检查数据,系统设法将有关检索要求的信息一次性地传送给功能层;而用户登录后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。在应用设计中,必须避免在表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。4.1即时聊天系统的实施原理4.1.1 工作方式和技术原理典型的IM工作方式如下:登陆CHAT通讯服务器,获取一个自建立的历史的交流对象列表(同事列表),然后自身标志为在线状态,当好友列表中的某人在任何时候登录上线并试图通过你的计算机联系你时,IM系统会发一个消息提醒你,然
24、后你能与他建立一个聊天会话通道进行各种消息如键入文字、通过语音等的交流,从技术上来说,聊天系统的基本技术原理如下:第一步,用户A输入自己的用户名和密码登录IM服务器,服务器通过读取用户数据库来验证用户身份,如果验证通过,登记用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号,然后返回用户A登录成功的标志,此时用户A在IM系统中的状态为在线(Online Presence)。第二步,根据用户A存储在IM服务器上的好友列表(Buddy List),服务器将用户A在线的相关信息发送给也同时在线的IM好友的PC机,这些信息包括在线状态、IP地址、IM客户端使用的TCP端口(Port)
25、号等,IM好友的客户端收到此信息后将在予以提示。第三步是IM服务器把用户A存储在服务器上的好友列表及相关信息回送到他的客户端机,这些信息包括也在线状态、IP地址、IM客户端使用的TCP端口(Port)号等信息,用户A的IM客户端收到后将显示这些好友列表及其在线状态。4.1.2 通讯方式(1)在线直接通讯如果用户A想与他的在线好友用户B聊天,他将直接通过服务器发送过来的用户B的IP地址、TCP端口号等信息,直接向用户B的PC机发出聊天信息,用户B的IM客户端软件收到后显示在屏幕上,然后用户B再直接回复到用户A的PC机,这样双方的即时文字消息就不再IM服务器中转,而是直接通过网络进行点对点的通讯,
26、即对等通讯方式(Peer To Peer)。【5】(2)在线代理通讯用户A与用户B的点对点通讯由于防火墙、网络速度等原因难以建立或者速度很慢,IM服务器将会主动提供消息中转服务,即用户A和用户B的即时消息全部先发送到IM服务器,再由服务器转发给对方。4.2软件设计流程因为该系统其需求是十分明确的,所以该系统的开发流程采用瀑布模型进行设计,分为几大步骤:先进行需求分析,再是系统设计,然后是详细设计与编码,其次是软件的测试,最后是软件的运行和维护。【6】在实际过程中这些步骤经常是重叠和彼此间有信息交换,它不是一个简单线性过程,而是包括开发步骤的多个反复。如图2所示。需求分析系统设计详细设计与编码软
27、件测试软件运行与维护图2 即时通讯系统开发流程图4.3功能模块划分该即时聊天工具按如下过程完成通信:(1)客户向服务器注册,告知服务器该客户监听某主题;(2)客户注册之后,向服务器发送消息;(3)服务器再把消息发送给所有监听此主题的客户。根据以上描述,该系统功能模块图请见图3。即时聊天系统服务器端客户端建立连接存储数据监听用户新建用户登 录通讯交流图3 通讯系统的功能模块4.3.1 服务器端由图3可知服务器端完成至少3大功能:建立连接、存储数据和监听客户。这3大功能的具体含义如下:(1)建立一个ServerSocket连接,不断侦听是否有客户端连接或者断开连接。(2)服务器端是一个信息发送中心
28、,所有客户端的信息都传到服务器端,再由服务器根据要求分发出去。(3)数据库数据操作包括将用户信息存储到数据库等。4.3.2 客户端客户端要完成4大功能:新建立用户、用户登录、通信交流。这些功能的含义如下:(1)新建立用户:客户端与服务器端建立通信信道,向服务器端发送新建用户的信息,接收来自服务器的信息进行注册。(2)用户登录:客户端与服务器端建立通信信道,向服务器端发送信息,完成用户登录。(3)通信交流:客户端可完成的信息的编辑、发送和接收等功能。4.4 数据库概要设计因为本系统采用的是2级C/S结构模式,所以,为了减少服务器的存储量,方便程序设计,本系统只对用户信息进行存储。利用JAVA中的
29、框架技术进行存储。在中,各表的映射文件可以通过工具生成,在本系统中,用户表信息可以用Xml代码实现。用户表(user)表1 用户信息表名称字段名称类别主键非空用户编号id数字是是登录名CustName文本否是登录密码CustPassword文本否是年龄Age文本否是性别Sex文本否是电子邮箱email文本否是5 详细设计5.1 服务器端的设计与实现作为C/S模式下的系统开发,很显然服务器端程序的设计是非常重要的。下面就服务器端的相关程序模块进行设计,并一定程度上实现了相关功能。5.1.2 主服务器类的设计设计服务器时需要考虑如下几个因素:(1)服务器的运行速度;(2)服务器的响应速度,包括新建
30、连接和发送数据的响应速度;(3)I/O吞吐量;(4)其他:流量控制(QoS)、安全性。针对TCP/IP协议的数据结构,设计服务器的程序结构需要考虑以下的因素:(1)多线程;(2)多进程;(3)单线程。主服务器类实现了服务器端的多线程,使用SeverSocket s=newServerSocket(1001)语句在1001端口创建套接口;使用new ServerThread(socket)语句创建新的线程。主服务器类调用ServerThread类,而每个ServerThread实体就是一个独立的线程,刚好对应于客户端的连接请求响应线程。服务器端有一个(或多个)进程在指定的端口等待客户的连接信息,
31、一旦连接成功,就可以按设计的数据交换方法和格式进行数据传输。客户端只在需要的时候向服务器端发出连接请求。实现界面如图4。图4 服务器启动界面现就其中一些核心代码进行讲解。public class JavaServer extends Thread其中public是JAVA的关键字,用来表示该类是共有,在整个程序里都可以访问到它;Class表示类定义,它后面接着用户定义的类的类名为AppServer;extends表示继承的意思,他后面的类Thread是子类,能够继承父类AppServer所定义的一些变量。这条语言表示的意思就是声明一个公共类AppServer,用子类Thread继承父类AppS
32、erver中的一些变量。static boolean newMessage。其中,static是关键字,表示静态变量,Boolean表示变量类型为布尔型,变量名为newMessage。这条语句的意思是定义一个静态变量newMessage,它的类型为布尔型。值得强调的是布尔型数据只有两个值true和false,并且它们不对应人数整数值。if(start) sFrame.txtStatus.setText("已启动.");log(null,"服务器已启动." );else sFrame.txtStatus.setText("关闭中.");
33、这是一条if条件判断语句,它表示变量start如果不为空,那么执行语句第一个大括号中的语句,如果为空,则执行else中的语句。其中,log为输出语句,表示在窗口中输出“服务器已启动”信息。public void run() try while (start) Socket client = serverSocket.accept();Connection con = new Connection(client, u, v, userInfo); catch (IOException e) log(e, "不能监听!");这个函数的作用是监听用户信息,void表示定义的函数不
34、需要返回值,while是循环语句关键字,在语句中的意思为直到start的值不为空,将循环执行后面括号的语句,直到start值为空后,循环才结束。Connection con表示连接用户信息。Catch是对java中的异常进行捕获,并且能够抛出异常,便于程序能够正常运行。5.1.2 登录验证模块系统的登录模块是比较重要的,这是用户的一个身份验证,是通讯系统必须的一个功能模块。如果客户端输入的字符串表方式需要登录,那么服务器在接收到该信息后连接数据库,准备从数据库选择昵称和密码。服务器接收到客户端发送过来的号码和密码信息后,设定数据库查寻条件,并执行数据库查寻,通过比较输入的用户名和密码数据库信息
35、来却请用户的登录是否成功。以下为登陆验证的流程图。符合不符合登陆系统输入帐号密码验证进入系统图5 用户登录流程图5.1.3 注册处理模块新建用户是即时通讯工具的一个基本功能。用户新建过程也在线程监听函数run()中。新建用户的过程是这样的:首先使用Register_Customer()方法加载数据库驱动类;然后使用dao.getUser()方法获取数据;在获取注册名时,进行判断,查看用户名是否重复,如果重复,则向客户端弹出提示信息,见图6;如果不重复,服务器接收客户端用户发送的昵称、密码、用户E-mail等信息,执行数据库添加操作完成用户的创建;最后向用户反馈注册成功信息。图6 注册名重复提示
36、信息5.2 客户端的设计与实现前一章介绍了服务器端的设计与实现,对于C/S模式的系统而言,还必须对系统的客户端进行设计和实现。下面就来解决这样一个问题。客户端通过Socket与服务器建立连接。服务器与客户都通过构造BufferedReader、PrintWriter来建立输入流和输出流,双方通过该输入流和输出流来相互传递信息。只要收到客户端的连接请求,服务器利用accept()函数返回一个新建的Socket对象,随后客户端向服务器发送消息,诸如注册、登录和查找同事等请求,服务器收到请求后,针对不同的消息处理请求。5.2.1 用户注册模块当用户向服务器端发出注册请求后,客户端将向服务器发送客户传
37、递的信息,诸如客户的昵称、性别、个人资料等信息。等服务器接收完毕后,服务器会通过hibernate框架读取数据库信息,并进行判断,最后在客户端收到服务器的反馈信息。现对部分关键语句进行讲解。public class Register extends JFrame implements ActionListener Toolkit toolkit=Toolkit.getDefaultToolkit();JButton btnOk,btnCancel,btnClear;public Register(String ip) btnOk=new JButton("确定(O)");
38、btnOk.setMnemonic('O'); btnOk.setToolTipText("保存注册信息"); btnOk.setBounds(250,135,80,25);Implement继承于接口类时用的关键词【7】,在数据接口位置使用,在这里表示类ActionListen类继承类Register。JButton btnOk,btnCancel,btnClear。这条语句中,JButton其实是一个类,名为JButton按钮类,它是JAVA中自带的一种控件,当鼠标移入、移出、被点击所定义的3个变量时,会触发JButton类,从而执行相应的操作。如在类R
39、egister中,当鼠标点击“确定”按钮时,则会触发类JButton定义的变量btnOk,并且为其赋值,进而调用setToolTipText方法,将注册信息进行保存。而setBounds类是JAVA自带类,他能够设置组件位置【8】,即确定注册窗口位置。见图7。图7 用户注册界面5.2.2 用户登录当用户点击登录时,客户端发起请求与服务端建立连接,登录信息首先在客户端做验证,然后通过填写的服务器IP地址申请与服务端建立连接。而在服务器端,有一个主线程专门创建SOCKET服务,等待客户端的连接,每当客户端发起连接的申请时,与之建立连接,并创建一个线程,将建立的连接交给这个线程处理,并将连接存入一个
40、集合中,用于后续业务的处理。然后服务器将反序列化客户端传输过来的数据,生成一个用户对象。从中获取登录填写的信息,根据用户名和密码在数据库中查找数据,如果能够找到表示登录成功,反之,登录不成功。最后将登录的结果通过文本发送给客户端发送给服务端。最后,如果通过验证,得到一个标志,进入聊天主窗体,否则弹出登录失败的对话框,让用户重新登录。登陆界面见图8图8 用户登陆界面现对部分关键代码进行讲解:public void actionPerformed(ActionEvent ae)Object source=ae.getSource();if (source.equals(btnLogin) if(t
41、xtUserName.getText().equals("") | pwdPassword.getText().equals("") JOptionPane op1=new JOptionPane(); op1.showMessageDialog(null,"用户名或密码不能为空"); else strServerIp=txtServer.getText(); login(); 该语句表示的意思为接受用户登陆信息,如果用户名或者密码为空,则弹出提示信息,如果不为空,则调用login方法。这里equals表示接受变量的值;“|”表示“或
42、”的意思,;showMessageDialog是JAVA的自带控件,作用是在当前界面弹出对话框;关键字new,是一种调用方法,表示能够直接调用类的构造方法。5.2.3 在线用户显示设计用户完成登录后,客户端与服务器端建立连接。连接建立成功后,客户向服务器请求读取在线人员名单;服务器收到该请求,开始读取数据库中的user表并得到同事的号码,向客户端发送这些信息;客户收到服务器信息后,在主窗口显示显现成员的昵称。其实现代码如下:for (int i=0;i<messobj.userOnLine.size();i+) String User=(String)messobj.userOnLine
43、.elementAt(i); lstUserList.addItem(User); 这里采用了for循环,定义变量i,初值为0,只要i满足;i<messobj.userOnLine.size()这个条件,循环将执行一次。执行完一次循环后i的值自动加1,这里的messobj.userOnLine.size()表示在线用户的人数,lstUserList.addItem(User)表示显示用户的昵称。5.2.4 聊天信息发送与接收聊天信息的发送与接收都是通过Socket类实现的。使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。
44、也就是说,在服务端开启socket服务,客户端每一次连接成功时也都会同时创建一个线程来处理这次连接的请求,而该连接会被保存在一个集合中,直到服务结束,连接关闭,该线程也会结束,同时从连接的集合中移除该连接。(1)信息发送用户在每次发送信息时,首先向服务器发送的是自己信息和发送对象信息,然后再通过Socket类向服务器发送信息。当然,在每次输入信息后,输入信息框的内容将会被清空。关键代码如下: public void sendMessage() chatobj.chatUser=strLoginName; chatobj.chatMessage=txtMessage.getText(); cha
45、tobj.chatToUser=String.valueOf(cmbUser.getSelectedItem(); chatobj.whisper=chPrivateChat.isSelected()?true:false;/向服务器发送信息 trySocket toServer=new Socket(strServerIp,1001); ObjectOutputStream outObj=new ObjectOutputStream(toServer.getOutputStream(); outObj.writeObject(chatobj); txtMessage.setText(&quo
46、t;"); /清空文本框 outObj.close(); catch(Exception e)其中,方法中的前三句表示系统获取发送信息者的昵称,发送信息内容以及发送对象的昵称;chPrivateChat.isSelected()?true:false这是一个判断语句,表示信息值是否为空,如果isSelected方法有值,那么将true赋给chatobj.whisper,如果为空,则赋false。在上文中,我们讲到了catch有抛出异常的作用,而trycatch也是具有相同的功能,try 块块是需要捕获异常的,因为文件有可能不存在,会导致程序崩溃,所以直接捕获,也可以直接throws
47、出去,让调用该方法的方法去捕获,从而使程序能够正常进行。此外,函数Socket(strServerIp,1001) 用来创建一个能够进行网络通信的套接字。参数strServerIp为通信协议的协议族,1001则为服务器IP。而outObj.writeObject(chatobj)的作用则是把调用writeObject方法,将信息发送到服务器。(2)信息输出本即时聊天系统的信息输出原理是将所有输入信息通过socket类向服务器发送,然后直接从服务器中突出信息。关键代码如下:Socket toServer;toServer=new Socket(strServerIp,1001);/将信息发往服务
48、器Message messobj=new Message();messobj.username = strLoginName;ObjectOutputStream streamtoserver=new ObjectOutputStream (toServer.getOutputStream();streamtoserver.writeObject(Message)messobj);/收来自服务器的信息由于上文以对很多方法进行讲解,现主要对ObjectOutputStream进行讲解。ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以
49、使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。也就是说通过ObjectOutputStream 将toServer.getOutputStream()进行重构,从而将服务器接受的信息重构到客户机上,最后通过streamtoserver.writeObject()方法将信息写在客户端上。5.3 数据库设计在前文我们已经分析了数据库的实现是采用了hibernate框架中的.XML映射。以下则为实现的关键代码:-<hibernate-mapping package=&quo
50、t;org.seler.bean" auto-import="true">-<class name="Register_Customer" table="user"> <id name="id" column="id"> <generator class="native" /> </id> <property name="custName" not-null="true&quo
51、t; unique="true" optimistic-lock="true" lazy="false" /> <property name="custPassword" not-null="true" unique="false" optimistic-lock="true" lazy="false" /> <property name="age" not-null="true&q
52、uot; unique="false" optimistic-lock="true" lazy="false" /> <property name="sex" not-null="true" unique="false" optimistic-lock="true" lazy="false" /> <property name="email" not-null="true"
53、 unique="false" optimistic-lock="true" lazy="false" /> </class> </hibernate-mapping>其中,package="org.seler.bean"表示调用该框架bean中的数据包;auto-import="true"表示hibernate框架中的将映射文件实体;property表示元素定义,name表示字段名;not-null表示是否设置该字段为空;unique表示是否设置该字段为唯一值;o
54、ptimistic-lock指定此属性做更新操作时是否需要乐观锁定; lazy指定是否采用延迟加载及加载策略,设置为false,表示此关联对象不采用延迟加载。6 结论本项目是一个JAVA及时通讯系统,在做系统的三个月之内,遇到了很多的问题,但是也从问题之中学习到了很多东西。比如乱码问题,比如socket问题,许许多多,但是从中多亏了导师的帮助,我才能顺利的解决,所以我在这里衷心的感谢我的导师我的同学,感谢大家对我的帮助,才让我能顺利的完成毕业设计!其次,本即时聊天系统采用了C/S模型。服务器在C/S模型中处于一个中心地位。服务器一般同时为多个客户提供服务,这就造成了服务器设计的复杂性。即时通讯服务器是数据中心,它是客户活动的中介,需要同时应对众多客户的请求。再次,本文并没有采用复杂的SQL,ORICLE等数据库,而是通过hibernate框架对数据进行映射,然后利用*.hbm.xml将数据进行存储。上面的这些问题,我以后都将会深深的记住。并且将其运用在实践中去。致谢为期一个学期的毕业论文(设计)已接近尾声了,我的四年大学生涯也即将圈上一个句号。此刻我的心中却有些怅然若失,因为那些熟悉的计科学院的恩师们和各位可爱的同学们,我们也即将挥手告别了。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论