即时聊天系统的构建及实现_第1页
即时聊天系统的构建及实现_第2页
即时聊天系统的构建及实现_第3页
即时聊天系统的构建及实现_第4页
即时聊天系统的构建及实现_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

目录

序言

1.1课题选题背景

1.2即时通信的概念和特点

1.3即时聊天系统的发展

2波及的有关技术及协议

2.1Java语言

2.2C/S模式简介

2.3Hibernate框架简介

3系统需求分析

3.1即时聊天消息的一般需求

3.2即时消息的协议需求

3.3即时消息IT'J安全需求

3.4即时信息加密和鉴别

即时通讯系统需求

4系统设计

4.1即时聊天系统的实行原理

4.2软件设计流程

4.3功能模块划分

4.4数据库概要设计

5详细设计

5.1服务器端的设计与实现..............................

5.1.2主服务器类I内设计.............................

5.1.2登录验证模块.................................

带格式的:目录3,行距:固定值22喳]

,5.1.3,主册处理模先

1带格式的:超链接,字体:五号,检置拼写和语法]

5.2客户端的设计与实现域代码已更改

\1带格式的:字体:(国际)TimesNewRoman

格格式的:秘St报字体:五号,检任拼写和语法]

5.2.1顾客注册模块..

5.2.2顾客登录.....................................

5.2.3在线顾客显示设计

5.2.4聊天信息发送与接受

5.3数据库设计

6结论.....................................................

道谢.......................................................

参照文献..................................................

时录.......................................................

基于Java即时聊天系统的设计与实现

摘要:计算机网络技术高速发展的今天,即时通讯方式日益受到人们的青睐。即时聊天

二具在实现传播视频与音频信息,使协作组员可以远距离进行直观、真实的视音交流

的同步,运用多媒体的技术,它还M以协助使用者对工作中多种信息进行处理。

本课题研究的是支持内部网络交流的系统一一网络即时通讯系统。该系统使用

Java语言进行编程。系统采用C/S构造模式,支持局域网和Inlernel。该系统采用软

件工程的瀑布模型进行开发,分别讨论了系统的需求分析、概要设计、详细设计和编

码、以及整个系统B勺运行和测试。

关键词:即时聊天;系统;Java;C/S

Abstract:Therapiddevelopmentofcomputernetworktechnologytoday,moreimmediate

meansofcommunicationbypeopleofallages.Real-timechaitoolinachieving(he

transmissionofvideoandaudioinformation,sothatmemberscancollaborateremotely

intuitive,realaudioandvisualcommunicationatthesametime,useofmultimedia

technology,itcanalsohelpuserstowerkinallkindsofinformationprocessing.

Studyofthisissueistosupporttheexchangeofinternalnetworksystems-network

instantmessagingsystem.ThesystemusesJavaprogramminglanguage.SystemusestheC

/Sstructuremode,supportforLANandInternet.Thesystemusesthewaterfallmodelof

softwaredevelopmentprojectswerediscussedsystemrequirementsanalysis,outlinedesign,

detaileddesignandcoding,andrunandtestthewholesystem.Finally,thepaperconcluded.

Ofcourse,thesystemiherearesomeimperfections,andseektostudyandworkin(he

futurebeamendedsothatthesystemactuallyusedinavarietyofnetworkefficiency.

1序言

交流对于人类社会及其每个组员都至关重要。直接交流的方式包括语言、文字等,

而远程交流还需借助于某些先进的工具如、网络等。本课题研究的是支持内部网络

交流的系统——网络即时通讯系统。该课题在实行口勺过程中需要使用Java语言。

1.1课题选题背景

计算机技术、网络技术高速发展I向今天,即时通讯方式口益受到人们的青睐。即

时通讯工具在实现传播视频与音频信息,使协作组员可以远距离进行直观、真实的视

音交流I内同步,运用多媒体的技术,它还可以协助使用者对工作中多种信息进行处理.

大家都懂得,网络上常用的即时通讯工具之一有ICQ。其实,ICQ是英文“Iseek

知u”的简称,中文意思是“我找你”。ICQ最大的功能便是即时信息交流,只要记得对

方H勺号码,上网时可以呼他,无论他在哪里,只要他上网打开ICQ,人们就可以随时

交流。

目前即时聊天系统种类众多,功能也较为齐全。该课题目前所研究的即时通讯系

统,其目H勺是定位于企业内部网络,处理企业或单位的沟通及协同的问题,提高工作

效率。企业内部员工可以运用该通讯系统随时随地发送文字消息、进行多人群聊、消

息群发、传送文献、音频视频对话等。系统包括客户端程序和服务器端程序,支持局

域网和Inlernet。企业内部员工之间可以在内部网覆盖的任何地点、任何时间进行即时

交流,真正实现企业内部协同工作。使您不必花费大量的时间、金钱汇集到一种地方,

通过网络,就能实现面对面H勺沟通,提高了效率。MSN、等公共淮息系统,由于

聊天对象及内容的不可控,若在企业内部使用,也许会减少工作数率。而该即时通讯

系统将自己的服务器端安装在企业内,并且人员的创立是由系统管理员来完毕,因此

便好的处理了这个问题。

即时通讯带给了更大的互动性,人们在交流彼此的见解、意见时,发现采用你来

我往的方式到达的效果最为明显。这就体现r互动性。通过使用及时通讯系统,大家

天需要离开电脑,不需要借助其他额外的工具,就可以在线实时地交流工作。

1.2即时通信的概念和特点

即时通讯(IM)是一种容许两人或多人使用网络即时地传递文字信息、档案、语音

与视频交流的终端服务。即时通讯不•样于e-mail在于它的交谈是即时的。S大部分

的即时通讯服务提供了presenceawareness的特性一显示联络人名单,联络人与否在

在线与能否与联络人交谈。在初期的即时通讯程序中,使用者输入的每一种字符都会

即时显示在双方的银幕,且每一种字符的删除与修改都会即时H勺反应在银幕上。这种

模式比起使用e-mail更像是交谈,充足体现了其实时特性。在目前的即时通讯程序

口,为「画面的完整美观和交流以便,交谈中的另•方•般只会在当地端按下送出键

(Enter或是Ctrl+Enter)后才会看到信息。

1.3即时聊天系统的发展

二十世纪七十年代初期,一种较早的即时通讯形式是柏拉图系统(PLATOsystem),

八十年代,UNIX/Linux的交谈即时信息被广泛的使用于工程师与学术界,九十年代即

时通讯更可探越了操作系统平台交流,1996年II月,首个广泛被非UNIX/Linux使用

者用于因特网I向即时通讯软件ICQ出现。一般认为ICQ是目前流行使用H勺即时通讯软

件的开山之作。ICQ源于以色列特拉维大的Mirabils企业。该企业成立于1996年7月,

乜就是在这个时候,四个月后的1996年II月,互联网上最出名,下载使用人数最多

的免费软件ICQ诞生了,她是由几种以色列的年轻人制作的J,在无人投资的状况下,

他们向全球互联网顾客提供免费下载使用,到了1998年,Mirabilis企业的ICQ顾客

己经发展到1200万人,并以每月100万顾客的速度增长。这时候,ICQ企业山于其潜

在H勺巨大商业广告价值,已经成为许多大企业争相购置的对象,1998年ICQ企业将自

己开发的软件连同顾客一起“卖”给了美国在线(AOL),售价2.87亿美元。据美国在

线1999年终称,ICQ使用者已达5000万,其中超过三分之二的使用者居住在美国本

二以外的世界各地。ICQ造就的实时通信成了互联网世界中发展最快的一种领域。

2波及的有关技术及协议

为了保证课题能正常熨行,先来分析一下课题所需要的有关技术和协议.

2.1Java语吕

通过认真的讨论分析,综合多种计算机高级语言的特性和适应范围,最终决定选

择纯而向对象的Java语言来完毕毕业论文的设计,下面就技术可行性方面,对Java

语言作一简要简介。

Sun企业的口号就是“网络就是计算机”,Java能使所有东西从桌面计算平稳的转

变为基于网络H勺计算,它是专门为此而建立H勺,并显然是为了完毕这个任务而来的。

使用Java语言,可以相对轻松的一天编写一种有条理的网络程序。今天,JavaI向网络

功能正在飞跃发展,不停有新的特性增长到这个有价值的基础匕JavaSoft试验室正

在不停努力使Java愈加完善。就Java语言的重要特点,本人归纳如下:

Java程序设计的开发过程与运行环境Java是解释型的高级编程语言,因此Java

程序的开发一般需要通过编写源程序、编译生成字节码和运行三个过程。这里要提到,

Java应用程序II勺开发周期包拈编译、下载、解杼和执行几种部分。Java编译程序将Java

源程序翻译为JVM可执行代码一字节码。这一编译过程同C/C++I内编译有些不一样。

当C编译器编译生成一种对象II勺代码时,该代码是为在某一特定硬件平台运行而产生

的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存

偏移量,以保证程序运行。Java编译器却不将对变量和措施的引用编译为数值引用,

乜不确定程序执行过程中时内存布局,而是将这些符号引用信息保留在字节码中,由

解释器在运行过程中创立内在布局,然后再通过查表来确定一种措施所在的地址。这

样就有效的保证了Java的可移植性和安全性。⑵

2.2C/S模式简介

20世纪90年代出现并迅速占抵主导地位的一种计算模式为客户机/服务器模式,

简称为C/S模式,它实际上就是把主机一终端模式中本来所有集中在主机部分I为任务

一分为二,保留在主机上的部分负责集中处理和汇总运算,成为服务器:而卜放到终

端I内部分负责为顾客提供友好的交互界面,称为客户机。⑶相对于此前1内模式,C/S

模式最大的改善是不再把所有软件都装进•台计算机,而是把应用系统提成两个不一

样的角色和两个不一样的地位:一般在运算能力较强的计算机上安装服务器端程序,

而在一般的PC上安装客户机程序。正是由于个人PC机H勺出现使客户机/服务器模式

成为也许,由于PC机具有一定的运算能力,用它替代了上面第一种模式的哑终端后,

就可以把主机端H勺一部分工作放在客户机端完毕,从而减轻了主机的承担,也增长了

系统时顾客的响应速度和响应能力。

客户机和服务器之间通过对应的网络协议来进行通讯。客户机向服务器发出数据

祈求,服务器将数据传送给客户机进行计律,计克完毕,计笄成果可返回给服务器。

这种模式的长处充足运用了客户机的性能,使计算能力大大提高:此外,山丁•客户机

和服务器之间日勺通讯是通过网络协议进行的,是一•种逻辑的联络,因此物理上在客户

机和服务器两端是易于扩充的。C/S模式是目前占主流的网络计算模式。

该模式在操作过程中采用的是积极请示方式:

首先服务器方要先启动,并根据请示提供对应服务(过程如下):

(I)打开一种通信通道同步告知当地主机,服务器乐意在某一种公认地址I.接受客

户祈求。

(2)等待某个客户祈求抵达该端口。

(3)接受到反复服务祈求,处理该祈求并发送应答信号。

(4)返回第二步,等待另一客户祈求。

(5)关闭该服务器。

客户端:

(1)打开一种通信通道,并连接到服务器所在主机的特定端口。

(2)向服务器发送服务祈求报文,等待并接受应答:继续提出祈求。

(3)祈求结束后关闭通信通道并终止。

分布运算和分布管理是客户机/服务器模式的特点。最终选择了C/S模式。

2.3Hibernate框架简介

Hibernate是一种Java语言下的对象关系映射处理方案。它是一种自由、开源I内软

件。它用来把对象模型表达口勺对象映射到基于SQL的关系模型构造中去,为面向对

象的领域模型到老式的关系型数据库的映射,提供了一种使用以便的框架。

电要作用有:Hibernate不仅管理Java类到数据库表H勺映射(包括从Java数据类

型到SQL数据类型的映射),还提供数据查询和获取数据的措施,可以大幅度减少开

发时人工使用SQL和JDBC处理数据的时间。卬它的设计目的是将软件开发人员从

天量相似的数据持久层有关编程工作中解放出来。无论是从设计草案还是从一种遗留

数据库开始,开发人员都可以采用Hibernate。

在应用方面,Hibernale对JDBC进行了非常轻量级的对象封装,使得Java程序员

可以随心所欲啊使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用

JDBC口勺场所,它既可以在Java口勺客户端程序使用,也可以在Servlet/JSP『、JWeb应用

口使用。最具革命意义Mj是,Hibernate可以在应用EJB(EnterpriseJavaBeansJava

应用于企业计算的框架)的J2EE架构中取代CMP,完毕数据持久化的重任。

3系统需求分析

前面两章简介了课题I向选题背景和有关的技术基础和协议。在本章中将讨论一下

即时通讯系统H勺需求分析。

3.1即时聊天消息的一般需求

一般即时消息格式需求

(1)所有实体必须至少使用一种消息格式;

(2)一般即时消息格式必须定义发信者和即时收件箱的标识:

(3)一般即时消息格式必须包括一种让接受者可以回消息的地址:

(4)•般即时信息格式必须容许对信息有效负载的编码和鉴别(非ASCH内容):

(5)必须提供扩展和注册即时消息格式的模式叫机制。

可靠性需求

协议必须存在机制,保证即时消息成功投递或者投递失败的时候,发信者获得足

够的信息。

性能需求

(1)即时消息的传播必须足够H勺迅速:

(2)即时消息的内容必须足够丰言:

(3)即时消息的长度尽量足够的长。

3.2即时消息的协议需求

协议是一系列的环节,它包括双方或者多方,设计它口勺目的是要完毕一项任务。

即时通讯协议,参与的双方或者多方是即时通讯的实体。协议必须是双方或者多方参

与的,一方单独完毕的就不算协议。这样在协议动作的过程中,双方必须互换信息,

包括控制信息、状杰信息缥等。这些信息的格式必须昂协议参与方同鹿并日.遵照的。

好的协议规定清晰、完整,每一步都必须有明确的定义,并且不会引起误解;对每种

乜许的状况必须规定详细的动作。

3.3即时消息的安全需求

A发送即时消息M给B,有如下几种状况和有关需求:

(1)假如无法发送,A必须接到确认;

(2)假如M被投递了,B只能接受M一次:

(3)协议必须为B提供措施检查A发送了这条信息;

(4)协议必须容许B使用另一条即时信息,答复信息:

(5)协议必须为A提供措施保证没有其他个体C可以篡改M:

3.4即时信息加密和鉴别

(1)协议必须提供措施保证告知和即时消息H勺置信度,未被监听或者破坏;

(2)协议必须提供措施保证告知和即时消息的置信度,未被重排序域者回放:

(3)协议必须提供措施保证告知和即时消息被对的的实体阅读:

(4)协议必须容许客户自己使用措施保证信息的不被截获,不被重放和解密。

3.5即时通讯系统需求

3.5.1注册需求

(1)即时通讯系统拥有多种账户,容许多种顾客注册:

(2)一种顾客可以注册多种ID:

(3)注册所使用H勺帐号类型为字母ID,

3.5.2通讯需求

(1)顾客可以伯播文本消息:

(2)顾客可以传播RTF格式消息;

(3)顾客可以加密/解密消息等。

4系统设计

在这里我们将该即时通讯系统命名为CHAT,目前对该系统进行总体设计。采用

客户机/服务器(C/S)的模式来设计,是一种2层的C/S构造:应用程序服务器一>应

月程序客户端,其分层机构如图1所示。

图12层C/S构造示意图

客户层也叫做应用表达层,也就是我们说的客户端,这是应用程序的顾客接口部

分。给即时通讯工具设计一种客户层具有诸多长处,这是由于客户层肩负着顾客与应

月间的对话功能。它用于检查顾客的输入数据,显示应用的输出数据。为了使顾客能

直接地进行操作,客户层需要使用图形顾客接口。若通讯顾客变更,系统只需要改写

显示控制和数据检查程序就可以了,而不会影响其他两层。

服务层又叫做功能层,相称于应用的本体,它是将详细口勺业务处理逻辑编入程序

门。例如,顾客需要检查数据,系统设法将有关检索规定H勺信息一次性地传送给功能

层:而顾客登录后,聊天登录信息是由功能层处理过的检索成果数据,它也是一次性

传送给表达层啊。在应用设计中,必须防止在表达层和功能层之间讲行多次的数据互

换,这就需要尽量进行一次性的业务处理,到达优化整体设计的目的。

4.1即时聊天系统时实行原理

4.1.1工作方式和技术原理

经典的IM工作方式如下:登陆CHAT通讯服务器,获取一种自建立的历史的交

流对象列表(同事列表),然后自身标志为在线状态,当好友列表中的某人在任何时候

登录上线并试图通过你H勺计算机联络你时,【M系统会发一种消息提醒你,然后你能与

他建立一种聊天会话通道进行多种消息如键入文字、通过语音等的交流,从技术上来

说,聊天系统的基木技术原理如下:

第一步,顾客A输入自己的顾客名和密码登录IM服务器,服务器通过读取顾客

数据库来验证顾客身份,假如验证通过,登记顾客A的IP地址、IM客户端软件的版

入号及使用H'、JICP/UD1,端口号,然后返回顾客A登录成功的标志,此时顾客A在1M

系统中I向状态为在线(OnlinePresence)。

第二步,根据顾客A存储在IM服务器上的好友列表(BuddyLisi),服务器将顾

客A在线的有关信息发送给也同步在线的IM好友的PC机,这些信息包括在线状态、

产地址、IM客户端使用的TCP端口(Port)号等,IM好友的客户端收到此信息后将

在予以提醒。

第三步是IM服务器把顾客A存储在服务器上的好友列表及有关信息回送到他时

客户端机,这些信息包括也在线状态、IP地址、1M客户端使用口勺TCP端口(Port)

号等信息,顾客A的IM客户端收到后将显示这些好友列表及其在线状态。

4.1.2通讯方式

(1)在线直接通讯

假如顾客A想与他时在线好友顾客B聊天,他将直接通过服务器发送过来的顾客

B的IP地址、TCP端口号等信息,直接向顾客B的PC机发出聊天信息,顾客B的IM

客户端软件收到后显示在屏幕上,然后顾客B再直接答复到顾客A的PC机,这样双

方的即时文字消息就不再IM服务器中转,而是直接通过网络进行点定点的通讯,即

对等通讯方式(PeerToPeer)1.151

(2)在线代理通讯

顾客A与顾客BI内点对点通讯由于防火墙、网络速度等原因难以建立或者速度很

慢,IM服务器将会积极提供消息中转服务,即顾客A和顾客B的即时消息所有先发

送到IM服务器,再由服务器转发给对方。

4.2软件设计流程

由于该系统其福求是I•分明确的,因此该系统口勺开发流程采用瀑桶映型进行设计,

分为几大环节:先进行需求分析,再是系统设计,然后是详细设计与编码,另一方面

超软件的测试,最终是软件的运行和维护。⑹在实际过程中这些环节常常是重叠和彼

此间有信息互换,它不是一种简朴线性过程,而是包括开发环皿勺多种反复。如图2

所示。

图2即时通讯系统开发流程图

4.3功能模块划分

该即时聊天工具按如下过程完毕通信:

(1)客户向服务器注册,告知服务器该客户监听某主题;

(2)客户注册之后,向服务器发送消息;

(3)服务器再把消息发送给所有监听此主题H勺客户。

根据以上描述,该系统功能模块图请见图3。

图3通讯系统的功能模块

4.3.1服务器端

由图3可知服务器端完毕至少3大功能:建立连接、存储数据和监听客户。这3

人功能的详细含义如下:

(1)建立一种ServerSocket连接,不停侦听与否有客户端连接或者断开连接。

(2)服务器端是一种信息发送中心,所有客户端H勺信息都传到服务器端,再由服务

裾根据规定分发出去。

(3)数据库数据操作包括将顾客信息存储到数据库等。

4.3.2客户端

客户端要完毕4大功能:新建立顾客、顾客登录、通信交流。这些功能的含义如

、:

(1)新建立顾客:客户端与服务器端建立通信信道,向服务器端发送新建顾客的信

息,接受来自服务器的信息进行注册。

(2)顾客登录:客户端与服务器端建立通信信道,向服务器端发送信息,完毕顾客

登录。

(3)通信交流:客户端可完毕的信息的编辑、发送和接受等功能。

4.4数据库概要设计

曰于本系统采用的是2级C/S构造模式,因此,为了减少服务器的存储量,以便程序

设计,本系统只对顾客信息进行存储。运用JAVA中的hibernate框架技术进行存储。

在Hibernate各表那J映射义献….abm.xm]可以通过工具生成,在本系统2,顾客表

信息可以用Xml代码实现。

顾客表(user)

表I顾客信息表

名称字段名称类别主键非空

顾客编号id数字是是

登录名CustName文本否是

登录密码CustPassword文本否是

年龄Age文本否是

性别Sex文本否是

电子邮箱email文本否是

5详细设计

5.1服务器端的设计与实现

作为C/S模式下的系统开发,很显然服务器端程序的设计是非常重要的。下面就

服务器端的有关程序模块进行设计,并一定程度上实现了有关功能。

5.1.2主服务器类的设计

设计服务器时需要考虑如下几种原因:

(1)服务器的运行速度:

(2)服务器的响应速度,包括新建连接和发送数据的响应速度:

(3)1/0吞吐量:

(4)其他:流量控制(QoS)、安全性。

针对TCP/IP协议的数据构造,设计服务罂的程序构造需要考虑如I下的原因:

(1)多线程:

(2)多进程:

(3)单线程。

主服务器类实现了服务器端的多线程,使用SevcrSockcis=ncwServerSockct(1001)

语句在1001端口创立套接口;使用ncwServeiThread(sockel)语句创立新的线程。主服

务器类调用ServerThread类,而每个ServerThread实体就是一种独立的线程,刚好对

应于客户端口勺连接祈求响应线程。服务器端有一•种(或多种)进程在指定的端口等待

各户的连接信息,一旦连接成功,就可以按设计的数据互换措施和格式进行数据传播。

客户端只在需要的时候向服务器端发出连接祈求。实现界面如图4。

图]服务器启动界面

现就其中某些关键代码进行讲解。

publicclassAppServerextendsThread{}

其中public是JAVAIKJ关键字,用来表达该类是共有,在整个程序里都可以访问

到它;Class表达类定义,它背面接着顾客定义的类口勺类名为AppServer;exlends表达

继承的意思,他背面H勺类Thread是子类,可以继承父类AppServer所定义的某些变量。

这条语言表达的意思就是申明一种公共类AppServer,用子类Thread继承父类

AppSei-ver中的某些变量。

staticbooleannewMessageo其中,slatic是关键字,表达静态变量,Boolean表达

变量类型为布尔型,变量名为neuMessage,这条语句H勺意思是定义一种静态变量

newMessage,它H勺类型为布尔型。值得强调H勺是布尔型数据只有两个值true和false,

并且它们不对应人数整数值。

if(start){

sFrame.txtStatus.sedbxt("已启动

1。如叽"服务器已启动);

}else{

sFrame.txtStatus.setText("关闭中

)

这是一条if条件判断语句,它表达变量start假如不为空,那么执行语句第一种大

括号中的语句,假如为空,则执行else中的语句。其中,log为输出语句,表达在窗口

口输出“服务器已启动”信息。

publicvoidrun(){

try{while(start){

Socketclicni=scrvcrSockct.accepl();

Connectioncon=newConnection(client,u,v,userinfo);

)

}catch(lOExceptione){

log(e「不能监听!,1);

}

这个函数的作用是监听顾客信息,void表达定义的函数不需要返回值,while是循

环语句关键字,在语句中的意思为直到start的值不为空,将循环执行背面括号的语句,

直到start值为空后,循环才结束。Connectioncon表达连接顾客信息。Calch是对java

口的异常进行捕捉,并且可以抛出异常,便于程序可以正常运行。

5.1.2登录验证模块

系统的登录模块是比较重要的,这是顾客的一种身份验证,是通讹系统必须的一

种功能模块。假如客户端输入H勺字符串表方式需要登录,那么服务器在接受到该信息

后连接数据库,准称从数据库诜择昵称和密码。服务器接受到客户端发送过来的号码

和密码信息后,设定数据库查寻条彳匕,并执行数据库查寻,通过比较输入时顾客名和

湾码数据库信息来却请顾客的登录与否成功。如下为登陆验证的流程图。

图5顾客登录流程图

5.1.3注册处理模块

新建顾客是即时通讯工的一和基本功能.顾客新建过程也在线程监听函数run()

口。新建顾客的过程是这样的:首先使用RcgistcjCusiomcrQ措施加载数据库驱动类:

然后使用dao.geiUser。措施获取数据:在获取注册名时,进行判断,查看顾客名与否

反复,假如反复,则向客户端弹出提醒信息,见图6:假如不反复,服务罂接受客户

端顾客发送的昵称、密码、顾客E-mail等信息.,执行数据库添加操作完毕顾客H勺创立:

最终向顾客反馈注册成功信息。

图6注册名反复提醒信息

5.2客户端的设计与实现

前一章简介了服务器端的设计与实现,对于C/S模式的系统而言,还必须对系统

的客户端进行设计和实现。下面就来处理这样一种问题。

客户端通过Socket与服务器建立连接。服务器与客户都通过构造BufYcredRcadcr>

PrintWriter来建立输入流和输出流,双方通过该输入流和输出流来互利传递信息。只

要收到客户端的连接祈求,服务器运用accept。函数返回一种新建的Socket对象,随

即客户端向服务器发送消息,诸如注册、登录和查找同事等祈求,服务器收到祈求后,

针对不一样H勺消息处理祈求。

5.2.1顾客注册模块

当顾客向服务器端发出注册祈求后,客户端将向服务及发送客户传递的信息,诸

如‘客户的昵称、性别、个人资料等信息。等服务器接受完毕后,服务器会通过hibernate

框架诙取数据库信息,并进行判断,最终在客尸端收到服务器的反馈信息。

现对部分关键语句进行讲解。

publicclassRegisterextendsJFratneimplementsActionListener

Toolkittoolkit=Toolkit.getDefaultToolkit();

JButtonbtnOk.btnCancel.btnClear:

publicRegister(Stringip)

(

blnOk=ncwJBullon("确定(O)");

btnOk.setMnemonic('O');

bmOk.setToolTipTexK"保留注册信息“工

btnOk.setBounds(25G,135,80,25);

Implemen【继承于接口类时用的关键词⑶,在数据接口位置使用,在这里表达类

ActionListen类继承类Register«

JButtonbtnOk.btnCancel.btnClearo这条语句中JBulton其实是一种类,名为

JBuUon按钮类,它是JAVA中自带的一种控件,当鼠标移入、移出、被点击所定义的

3个变量时,会触发JButton类,从而执行对应H勺操作。如在类Register中,当鼠标点

己“确定”按钮时,则会触发类JBution定义的变量bmOk,并且为其赋值,进而调用

selToolTipTexl措施,将注册信息进行保留。而setBounds类是JAVA自带类,他可以

设置组件位置'9即确定注册窗口位置。见图7。

S7顾客注册界面

5.2.2顾客登录

当顾客点击登录时,客户端发起祈求与服务端建立连接,登录信息首先在客户端

做验证,然后通过填写的服务器IP地址申请与服务端建立连接.而在服务器端,有一

种主线程专门创立SOCKET服务,笔待客户端的连接,每当客户端发起连接的申请时,

与之建立连接,并创立一种线程,将建立附连接交给这个线程处理,并将连接存入一

种集合中,用于后续业务的处理然后服务器将反序列化客户端传播过来的数据,生

成一种顾客对象。从中获取登录填写的信息,根据顾客名和密码在数据库中资找数据,

假如可以找到表达登录成功,反之,登录不成功。最终将登录的成果通过文本发送给

各户端发送给服务端。最终,假如通过验证,得到一•种标志,进入聊天主窗体,否则

弹出登录失败的对话框,让顾客重新登录。登陆界面见图8

性8顾客登陆界面

现对部分关键代码进行讲解:

publicvoidactionPerfonned(ActionEventae)

{Objectsource=ae.gctSource();

if(sourcc.cquals(btnlvOgin))

{ifCixtUserName.getTextO.equalsC'")||pwdPassword.getText().equals(""))

{JOptionPaneopI=newJOptionPane();

op1.showMessageDialog(null,"顾客名或密码不能为空");

|

else{strServerIp=ix(Server.getText();

loginO:

}

)

}

该语句表达H勺意思为接受顾客登陆信息,假如顾客名或者密码为空,则弹出提醒

信息,假如不为空,则调用login措施。这里equals及达接受变量的值;友达“或”

的意思,;showMessageDialog是JAVA的自带控件,作用是在目前界面弹出对话框;

关键字new,是一种调用措施,表达可以直接调用类的构造措施。

5.2.3在线顾客显示设计

顾客完毕登录后,客户端与服务器端建立连接。连接建立成功后,客户向服务器

祈求读取在线人员名单;服务器收到该祈求,开始读取数据库中的user表并得到同事

的号码,向客户端发送这些信息;客户收到服务器信息后,在主窗II显示显现组员的

昵称。

其实现代码如下:

tor(inti=0;i<messobj.userOnLirie.size();i++)

StringUser=(String)messobj.userOnLine.elementAt(i);

IstUserList.addltem(User);

J

这里采用了for循环,定义变量i,初值为0,只要i满足;i<messobj.uscrOnLinc.size()

这个条件,循环将执行一次。执行完一次循环后i的值自动加1,这里的

messobj.userOnLine.size。表伙在线顾客的人数,IsiUserList.addkem(User)表认显示顾客

的昵称。

5.2.4聊天信息发送与接受

聊天信息H勺发送与接受都是通过Socket类实现的。使用Socket定网络上某一种

服务器的某一种端口发出连接祈求.一旦连接成功,打开会话;会话完毕后,关闭

Socket。也就是说,在服务端启动socke【服务,客户端每一次连接成功时也都会同步

创立一种线程来处理这次连接H勺祈求,而该连接会被保留在一种集合中,直到服务结

灾,连接关闭,该线程也会结束,同步从连接的集合中移除该连接。

⑴信息发送

顾客在每次发送信息时,首先向服务器发送的是自己信息和发送对象信息,然后

自通过Sockel类向服务器发送信息。当然,在每次输入信息后,输入信息框的内容将

会被消空。关键代码如下:

publicvoidscndMcssagc()

{chatobj.chatUser=strLoginNaine;

chatobj.chatMessagc=txtMessiigc.gctText();

chatobj.chatToUser=String.valueOf(cmbUser.getSelectedItem());

chalobj.whisper=chPriva【eChat.isSelecled()?irue:false;〃向服务器发送信息

try{SockettoServer=newSocket(strServerIp,1001);

ObjectOutputStream

outObj=ncwObjeclOutputStre;nr)(loServer.gctOutputStream()i;

outObj.writeObject(chatobj);

txtMessage.setTextC'"):〃清空文本框

outObj.close();

}catch(Exceptione){}

}

其中,措施中的前三句表达系统获取发送信息者的昵称,发送信息内容以及发送

对象的昵称;chPrivateChai.isSelected()?true:false这是•种判断语句,&达信息值与否

为空,假如isSelected措施有值,那么将true赋给chatobj.whisper,假如为空,则赋false»

在上文中,我们讲到了catch有抛出异常的作用,而iry…calch…也是具有相似H勺

功能,iry块块是需要捕捉异常的,由于文献有也许不存在,会导致程序瓦解,因此

直接捕捉,也可以直接throws出去,让调用该措施的措施去捕捉,从而使程序可以正

'莒进行。

此外,函数Socket(strServerlpJOUI)用来创立一种可以进行网络通信的套接字。

参数slrScrvcrlp为通信协议I向协议族,1001则为服务器IP。

而outObj.writeObjecKchalobj)口勺作用则是把调用writeObject措施,将信息发送到

服务器。

⑵信息输出

木即时聊天系统的信息输出原理是将所有输入信息通过socket类向服务器发送,

然后直接从服务器中突出信息。

关键代码如下:

Socket(oServer;

toServer=newSocket(strServerIp,1001);〃将信息发往服务器

Messagemessobj=newMessagei):

messobj.username=strLoginName;

ObjeclOutputStreamstreamtoserver=newObjevtOutputStream

(ioScrvcr.gctOulputStrcam()):

sireamtoserver.writeObject((Message)messobj);〃收来自服务器的信息

由于I:文以对诸多措施进行注解,现重要对ObjectOulpulSlreani进行讲解。

ObjectOutputStream将Java对象『、J基本数据类型和图形写入OuiputSiream。可以使

月ObjectlnpulSlream读取(重构)对象。通过在流中使用文献可以实现对象的持久

存储。假如流是网络套接字流,则可以在另一台主机上或另一种进程中重构对象。也

就是说通过ObjectOuipuiStream将lDServer.getOuipuiStream()进行重构,从而将服务器

接受的信息重构到客户机上,最终通过streamtoserver.wriieObject。措施将信息写在客

户端上。

5.3数据库设计

在前文我们已经分析了数据库的实现是采用了hibernate框架中的XML映射。如

、.则为实现H勺关键代码:

-<hibernate-mappingpackage="org.seler.bean"auto-iniport="true">

-<c!assname="Register_Custoiner"table="user">

<idname="id"cohimn="id"><generatorclass="native"/></id>

<propcrtynamc="custNamc"not-null-'true"uniquc="(ruc"oplimis(ic-lock="truc"

lazy="false"/>

<propertyname=,,custPassword"not-null="true"unique="false"optimistic-lock="true"

lazy="false"/>

<propertyname="age"not-null="tme"unique="false"optimistic-lock="true"

lazy="false"/>

<propertyname='sexnot-nu.l="true"unique="fa)se"optimi$tic-lock="true"

lazy="false"/>

<propertyname="email"not-null="true"unique="fa)se"optimistic-lock="true"

lazy="false"/>

</class>

</lHbernate-mapping>

其中,package="org.seler.bean"表达调用该框架bean中小J数据包:

auto-import="lrue"表达hibernate框架中的将映射文献实体;propeny表达元素定义,

name表达字段名;not-null表达与否设置该字段为空;unique表达与否设置该字段为

唯一值;oplimistic-lock指定此属性做更新操作时与否需要乐观锁定;lazy指定与否采

月延迟加载及加载方略,设置为false,表达此关联对象不采用延迟加载。

6结论

众所周知I,互联网从诞生以来,就开始影响着地球的每一种角落,予以了人类一

种全新的生活方式,伴随互联网技术的不停发展,新兴的技术也层出不穷,即时通信

系统就是这样一种以聊天形式为主的广受欢迎的互联网技术。当然,该课题讨论时即

时通讯系统是定位于内部局域网,供班级内部人员使用R勺通讯系统。

即时通信中最基本的功能就是通过计算机之间的文本数据的互换的形式实现思

想的交流和沟通,它的长处是以便快捷,为人们之间创立r一种新型的、廉价的、迅

速的、简便H勺沟通方式.

首先,本系统完全按照软件工程的瀑布模型进行开发,虽然缺乏部分开发文档,

但本论文则是按照需求分析,概要设计,详细设计,软件的运行和测试等的构造进行

安排的。

另一方面,本即时聊天系统采用了C/S模型。服务器在C/S模型中处在一种中心

地位。服务器一般同步为多种客户提供服务,这就导致了服务器设计的复杂性。即时

通讯服务器是数据中心,它是客户活动的中介,需要同步应对众多客户的祈求。

再次,本文并没有采用复杂的SQL,ORICLE等数据库,而是通过hibernate框

契对数据进行映射,然后运用*.hbmxml将数据进行存储。

最终,在编写这个聊天程序时碰到许许多多的问题,例如JAVA的图形化界面怎

样编写,该怎样布局。这是java的一种弱项,不像VBQELPHI等语言可以使用已经

有的控件。后米也在网上找到某些selBounds类,虽然调用起来比较麻烦,小过熟悉

后也觉得不是那么难。

通过•段时间的学习和工作,该即时聊天系统已经初具雏形,实现门网络即时通

信工具I向重要功能,为实现一种崭新的可跨平台H勺Java即时聊天工具打卜了基础。目

前该即时聊天系统的10版本已经投入试运行中。

道谢

为期•种学期的毕业论文(设计)已靠近尾声了,我的四年大学生涯也即将圈k

一种句号。此刻我的心中却有些怅然若失,由于那些熟悉的计科学院的恩师们和各位

可爱的同学们,我们也即将挥手辞别了。

值此论文完毕之际,心中充斥了一片感谢之情,在整个论文完毕的过程中得到了

我的导师于永武于老师的精心指导,在此要向他致以最崇拜的感谢。于老师总是在百

忙之中抽出时间来为我们解答论文设计过程中的疑惑。他循循善诱口勺教导和不拘一格

的里结予以我无尽的启迪。再次向于老师献上诚挚的谢意。

感谢我的舍友廖鸿,方敏同学,在论文完毕的过程中是他们在生活上和学习上予

以我很大的协助和支持,在我进行毕业设计的过程中是他们不停给我白信,如今才能

顺利完稿

温馨提示

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

评论

0/150

提交评论