答辩后4070107郭良华基于java的聊天系统的设计与实现最终版.docx
《答辩后4070107郭良华基于java的聊天系统的设计与实现最终版.docx》由会员分享,可在线阅读,更多相关《答辩后4070107郭良华基于java的聊天系统的设计与实现最终版.docx(46页珍藏版)》请在冰豆网上搜索。
答辩后4070107郭良华基于java的聊天系统的设计与实现最终版
本科生毕业论文(设计)
基于java的聊天系统的设计与实现
姓 名
郭良华
学 号
20114070107
专 业
计算机科学与技术
指导教师
师文
2015年5月30日
摘 要
随着互联网的发展,即时通讯工具正受到更大用户群体的青睐。
即时通讯(InstantMessenger,简称IM)是指一种能够让使用者即时发送和接收互联网消息的实时通讯服务。
即时通讯的最大特点在于它的即时性,只需通信双方同时在线,就能像多媒体电话一样,实现文字、档案、声音、影像等信息的互传。
在网络环境的支持下,通信双方可以便捷的实现信息交互,而不受物理距离的限制。
因此即时通信系统在当今社会中有着非常重要的地位。
本论文详细的论述了即时通讯系统的客户端和服务器端的主要组成模块,研究了各系统模块的实现方式和具体设计方案,重点阐述了各模块的主要功能,并通过模块流程图加以展示。
系统采用面向对象和模块化的设计方法,主要运用了网络通信技术、数据库技术、多线程技术等计算机相关技术,实现了文本通信、用户分组等功能,具有较强的通信实时性。
该系统基于C/S体系结构和MVC框架,使用Java语言进行开发,实现了多用户的即时通信。
设计并实现了用户注册、登录、用户列表、多用户即时聊天等功能。
基于Swing开发了较完整的图形用户界面(GUI);通过套接字编程实现了通信功能。
在上述技术研究的基础上,本文构建了局域网环境下,面向普通用户的即时通讯系统,该系统能够满足基本的通信需求。
同时该系统采用模块化程序设计模式,因此具有较好的系统扩充性。
关键词:
即时聊天;socket;局域网;java
Abstract
WiththedevelopmentoftheInternet,instantmessagingtoolisfavoredbymoreandmoreusergroups.IM(InstantMessenger,IM)referstoakindofreal-timecommunicationservicewhichallowsuserstosendandreceiveInternetmessagesinstantly.ThebiggestcharacteristicofInstantmessagingisitsimmediacy,justcommunicationonlineatthesametime,bothsidescanrealizetosendtheinformationtoeachotherlikemultimediaphone,suchastext,archives,soundandimage.Withthesupportofnetworkenvironment,bothcommunicationsidescaneasilyrealizetheinformationinteraction,whichcan’tberestrictedbyphysicaldistance.Soinstantcommunicationsystemhasaveryimportantpositionintoday'ssociety.
Thepaperdiscussesthemainmodulesoftheclientandserversideoftheinstantcommunicationsystemdetaily,studiesthewayofrealizationofeachsystemmoduleandthespecificdesign,expoundsthemainfunctionsofeachmodule,anddisplaysthembymoduleflowchart.Withstrongreal-timecommunication,thesystemadoptsobject-orientedandmodulardesignmethod,mainlyusescomputertechnology,suchasthenetworkcommunicationtechnology,databasetechnologyandmultithreadingtechnology,andhasrealizedthetextcommunication,usergroupandotherfunctions.ThesystemisbasedonC/SarchitectureandMVCframework,usesJavalanguagedevelopment,andrealizesthemulti-userreal-timecommunication.Thesystemdesignsandimplementstheuserregistration,login,theuserlist,multi-userinstantmessaging,etc.BasedontheSwing,thesystemdevelopesacompletegraphicaluserinterface(GUI).Throughsocketprogramming,thesystemachievesthefunctionsofcommunication.Onthebasisoftheabovetechnologyresearches,thispaperconstructstheinstantmessagingsystem,whichisdesignedforordinaryusersattheLANenvironmentandcanmeetthebasiccommunicationrequirements.Atthesametime,adoptingthemodularizedprogramdesignpatterns,thesystemhasagoodsystemexpansion.
KeyWords:
InstantChat,Socket,LocalAreaNetwork,Java
目 录
1引言
1.1开发的背景
互联网和信息技术的快速发展,促使聊天工具成为重要的一种沟通工具,人们越来越喜欢通过聊天工具来进行交流。
现在,已近出现了很多很好很成熟的聊天工具,比如说微信,腾讯QQ,易信,飞信等等。
但是这些聊天工具功能太过强大,且是第三方通信软件,面临着信息安全的问题。
传统的交流方式列如电话电子邮件等,这些手段要不费用太高,要么实用性不强,所以一些个人和企业等组织机构,为了满足自己和企业的沟通需求,就自行研发即时聊天工具来代替传统的电话、传真、邮件等沟通方式。
即时聊天工具可以说成为继电话、E-Mail之后比较受欢迎的新应用,随着软件、网络、通讯现代技术的快速发展,即时聊天工具在沟通、协作方面将显现出更大的方便、快捷、实用的优势。
1.2开发的目的和意义
随着计算机技术特别是计算机网络的快速发展,人们生活的方方面面得到了深刻的改变。
人们以低廉的价格,开发出实用、方便的聊天工具。
各种在线服务系统正深刻的影响着人们的联系和交流方式,希望可以远距离的进行即时通讯。
现代生活在慢慢摆脱过去的种种老旧的联系方式,网络聊天工具便应运而生,成为了一种方便消费者和人们之间联系的实用系统。
网上聊天系统的完善,为人们的交流与联系提供了一个平台。
基于java聊天工具的出现同时也解决了企业等机构内部交流不畅的问题,将聊天工具用在内部交流上,同时缓解了员工面对面向领导汇报的压力,领导也拜托了繁琐的交谈,双方都更加专注于自己的工作上。
同时,聊天工具的作用日益强大,人们进行及时聊天少不了网络通信技术。
利用网络通信技术开发的聊天工具有很多,比如QQ聊天工具就是众所周知的聊天软件。
最初通信工具的改进是由于人们的交流方式的改变而发生的,但随着企业内部的通讯工具的出现,在企业管理中即时信息将发挥更大的作用,由此观之,聊天工具的意义和价值已经不仅仅局限于进行交流与沟通了。
1.3研究的内容
1.3.1即时通讯原理
首先打开服务器端的程序,建立serversocket等待客户端的登陆请求;客户端首先进行身份的验证,如果用户名密码的格式正确则和服务器端建立socket连接,通过服务器验证登陆信息是否和数据库的用户信息匹配,如果匹配则发送好友信息建立好友列表。
该用户查看自己的好友上线信息,进行通信,用户的每次通讯信息都会用message进行信息的打包,将打包好的message发送给服务器端,服务器端根据messagetype信息类型,再将信息转发给其他用户。
这是一个典型的C/S模式。
1.3.2Swing技术
Java的swing技术主要用于进行UI的的实现,包括对原型图的实现,以及包括对事件的监听和消息的发送等,实际上的功能就是向用户展示界面和进行用户的交。
对于一个典型的mvc架构的系统,swing主要实现了view层,在我的聊天系统中界面包括有注册界面,登陆界面,好友列表界面,聊天界面,和开启服务器界面等。
1.3.3MVC设计模式
MVC是一种典型的软件设计模式,M代表的是Model层,V代表的是View层,C代表的是控制器层,主要是将代码分离,实现了用户交互的视图,业务逻辑,以及数据的分离,有利于代码的扩充,和架构的搭建,也实现了软件设计高内聚低耦合的思想,将相似的功能进行模块化,突出了面向对象的功能。
其中,control层是View和model进行连接的关键,其将数据进行模型化,然后交给控制器进行显示。
1.3.4系统的构建
系统整体架构采用C/S模式客户端的所有请求都是通过服务器端进行处理,通过服务器端对数据库的操作来响应客端的各种请求,MySQL作为数据库,mysql既经济又实惠。
2涉及的相关技术
为了保证系统能正常实施,先来分析一下系统所需要的相关技术和协议。
2.1java语言
由于对java语言相对来说比较熟悉,所以选择面向对象的java语言来完成毕业设计的软件部分,下面对java语言从技术的可行性方面做简要的介绍[1]。
Java语言的出现极大的提高了软件开发的效率,java语言的三大特征封装,继承,和多态。
封装是面向对象最基础的特性,将属性和方法进行封装构成一个类,当真正使用这些属性和方法来实现一些功能的时候,我们注意的不在是哪些属性和方法,而是一个一个的对象,使用对象来实现这些方法,其实这也是高内聚的一种体现。
继承则很好的解决了代码的冗余问题,将不同类的相似功能进行抽象,组建成父类,让子类去继承这些父类,就没必要再去写父类的属性和方法,很好的解决了代码的冗余问题。
多态则是很好的体现了软件设计的开闭原则的思想,对扩充开发,对修改关闭,说白了就是指向父类的指针已经可以指向其子类,为了实现软件的开闭原则,能用子类的地方尽量用父类来进行指代,便于对功能的扩充。
2.2c/s模式
C/S模式就是将一整个系统进行划分,包括客户端和服务器端,客户端主要用于和用户的交互,而服务器端主要用于数据的管理和逻辑处理,从而提高整个系统的响应速度和应变能力,从而提高用户的满意程度[2]。
通过相应的网络协议客户机和服务器之间来进行通讯,在服务器工作的情况下,客户机会向服务器发出数据请求,然后服务器将数据传送给客户机进行部分计算,计算完毕,计算结果可以返回给服务器。
这种c/s模式的优点充分利用了客户机端的计算的性能,使计算的能力得到很大提高;另外,由于是通过网络协议来进行客户机和服务器之间的通讯,仅仅是一种逻辑上的相互联系,因此在客户机和服务器两端在物理上是易于扩充的。
C/S模式是曾经很长一段时间主流的网络模式[3]。
在工作过程中该模式的主要过程如下:
首先开启服务器,并根据得到的请求进行相应服务回复:
1>首先在一个公认的IP地址上打开服务器端程序,同时通知本地的客户端程序,服
务器已经打开,然后等待客户端请求。
2>客户端发送自己的请求。
3>服务器端接受客户端的请求,并处理客户端的请求。
4>返回第二步,等待其他客户请求。
5>没有客户端请求后,关闭该服务器。
客户端:
6>打开自己的通讯端口,并和特定的服务器端的端口建立连接,直到收到建立连接成
功的通知。
7>然后通过通信通道向服务器发送自己的服务请求报文,等待并接收服务器端应答;
然后继续提出请求。
8>请求结束并得到处理后关闭自己的通信通道并终止与服务器的连接。
客户机/服务器模式的特点是分布运算和分布管理,因此最后我选择了C/S模式。
2.3即时通讯原理
首先进行注册,注册成功后,用自己的账号和密码登陆聊天软件,登陆成功后即显示出自己的好友列表,在线的好友则显示亮头像,不在线的好友显示灰色头像。
双击好友头像就会显示出与好友的聊天界面。
在聊天页面上,有输入信息框,和显示对话消息的面板,当需要发送消息时,在下端的输入框中输入即将发送的消息,然后点击“发送”按钮,程序就会自动把输入的信息内容、对方的ID号,本人的ID号、以及当前时间等内容打包成一个Message对象通过Socket发送到服务器端。
当服务器接收到Message之后,按照既定的message类型的协议进行解析和转发。
这样,双方就实现了即时通讯。
2.4mysql数据库应用
使用MySQL存储用户信息,借助于navicate界面工具对数据库进行快速的创建,并采用JDBC技术对数据库的信息进行增删改查。
使用navicate对其进行数据操作,可以很大程度上增加数据操作的方便性[5]。
2.5Socket通信技术
Socket的工作原理:
1>首先是建立Socket连接:
在通信双方之间建立一条虚拟的通信通道,进行信息的
发送与接收。
2>数据通信:
利用虚拟连接通道传送数据信息进行通信。
3>关闭:
通信结束时,再将所建的虚拟连接拆除。
具体的通信过程如下:
4>启动服务器端程序,打开serversocket端口,监听客户端发送socket连接。
5>启动客户端,由已知serversocket端口和IP地址,向服务器请求建立socket连
接,服务器端接受socket后,单独开启一个线程用于处理该请求,然后继续监听
其他的客户端请求。
6>建立socket后,客服端服务器端通过Message协议进行通信,首先message会将
各类消息打包成Message包,然后发给服务器,服务器则根据MessageType中的信
息类型进行不同的处理,并回复给客户端。
7>不停的进行信息的读写,知道有一端终端连接。
Socket通信技术介绍如图2-1所示。
图2-1Socket通信技术
2.6开发环境的搭建
使用MyEclipse10.0进行软件开发,整体采用C/S模式,MySQL作为数据库,使用NavicatforMySQL进行数据库的信息添加。
3系统分析
3.1系统基本功能实现
客户端可以实现注册,即时聊天,添加好友,删除好友,显示好友在线状况等功能。
服务器端应当先特定端口建立一个ServerSocket,并且不断监听是否有客户端建立连接或者断开连接。
服务器端应当是一个各类消息的发送中心,所有客户端的信息都是通过socket连接传到服务器端,由服务器端根据各类消息的类型进行消息的分发。
3.2可行性分析
本系统的可行性分析包括以下几个方面的内容:
3.2.1技术可行性
Socket技术和swing技术的使用,以及navicate的应用,包括C/S模式的采用,可以快速的进行系统原型的设计,可以很方便的地开发出基于网络的高效、简便、实用、的即时通讯系统,
3.2.2经济可行性
基于计算机应用的计算机网络已经非常普及,因此对于网络设备不需要进行很大的花费。
本系统仅仅需要一个安装mysql数据库的服务器,由于受并发人数的限制,所以成本不会很高。
3.2.3操作可行性
在局域网中,只要有一台以上的计算机相互连接,本聊天系统就可以进行安装使用,所以在操作上不会出现什么太大的问题。
如果真正要实现internet上少许人员的通讯,只需要在一个有固定IP地址的计算机上运行服务器端程序。
综上所述,即时通讯系统在技术、经济、操作上都是可行的。
3.3系统需求分析
3.3.1系统需求列表
经过对整个系统的分析,可得出如表3-1所示的系统需求列表。
表3-1系统需求列表
编号
执行者
功能
优先级
01
用户
注册
高
02
用户
登陆
中
03
用户
聊天
高
04
用户
添加好友
中
05
用户
删除好友
中
3.3.2功能性需求分析分析
本系统要实现的功能如下:
1>注册
首先用户填写注册信息,填写完后提交,先在客户端进行基本信息的审查,然后将信息提交给服务器。
服务器收到用户的请求,便开始接受客户传递的message信息,比如用户的qq号,昵称,密码,性别等信息,接受完毕后,便与后台数据库通过JDBC连接,然后向数据库添加用户信息,如果添加成功,则通知用户注册成功,客户收到登陆成功的信息后,便用该qq号和密码进行登陆。
2>登陆
用户填写登陆信息,比如号码和密码,然后与服务器建立连接,将登陆信息传送给服务器,服务器收到后,开始通过JDBC读取数据库信息,然后与用户输入的登陆信息进行比对,如果成功,客户端就向服务器请求读取好友信息,服务器收到该请求后,从数据库中取出好友列表信息,然后将好友列表信息打包成message信息,通过通信协议,然后向客户端发送这些信息,客户收到这些信息后就在主程序窗口中显示好友列表。
3>聊天
客户端首先在自己的信息输入框中填写自己即将发送的消息,然后点击发送按钮,客户端接受到发送指令后将发送的信息打包成message信息,然后通过已经建立的socket接口将message信息发送给服务器端。
服务器端接受到信息后在socket的hashmap中找到对应的接受者的socket连接然后将信息转发出去。
这样就完成了一次信息的接受与发送了,从而实现了聊天功能。
4>添加好友
在登陆的主界面,点击添加好友,然后输入好用号,点击添加,添加好友信息就会被打包成message信息,通过socket发送给服务器。
服务器接受后通过JDBC向mysql数据库的personalinfo表查询是否存在好友信息,如果查询成功,就会向客户端发送添加成功信息,同时将好友信息添加到friend表中,如果查询失败,就会向服务器发送添加失败信息。
5>删除好友
在登陆的主界面,点击删除好友,然后输入好友号,点击删除,删除好友信息就会被打包成message信息,通过socket发送给服务器。
服务器接受后通过JDBC向mysql数据库的friend表查询是否存在该好友,如果查询成功,就会向客户端发送删除成功信息,同时在friend表中删除该条信息,如果查询失败,就会向服务器发送删除失败信息。
3.3.3非功能性需求分析
对于非功能需求,本系统只有界面上的需求。
主要包括登录界面,如图3-1所示;注册界面,如图3-2所示;好友列表界面,如图3-3所示。
界面设计时,参考腾讯QQ、微信等的布局,采用蓝色与灰色搭配,使人看上去清楚明了。
图3-1登陆界面
图3-2注册界面
图3-3好友列表界面
4系统设计
4.1数据库概要设计
本系统所包含的主要实体和其属性:
Personalinfo信息表(用户账号,用户名,密码,性别,状态),其中Qnum是用户的账号,即Qq号,是主键,不可为空,其他字段的详细介绍如表4-1所示[7]。
表4-1Personalinfo信息表
编号
字段
说明
字段类型
长度
是否为主键
是否为空
01
Qnum
Qq号
Varchar
20
是
否
02
Petname
用户名
Varchar
20
否
否
03
Password
密码
Varchar
20
否
否
04
Sex
性别
Varchar
20
否
否
05
Status
状态
Varchar
4
否
否
Personalinfo信息表这个实体各个属性如图4-1所示。
图4-1Personalinfo信息表
friend信息表(自己账号,好友账号),其中Myqno和Friendqno均不能为空。
表4-2friend信息表
编号
字段
说明
字段类型
字段长度
是否为主键
是否为空
01
Myqno
我的Qq号
Varchar
20
是
否
02
Friendqno
朋友Qq号
Varchar
20
是
否
friend信息表这个实体各个属性如图4-2所示。
图4-2friend信息表
Personalinfo表和friend表的整体数据库E-R图如图4-3所示。
图4-3数据库整体E-R图
4.2系统模块设计
4.2.1聊天系统工作原理
此聊天系统的工作原理图描述如图4-4所示。
图4-4系统工作原理图
首先在局域网内打开服务器端程序,等待客户端的连接请求,客户端发送自己的连接请求,服务器接受后会和客户端建立一个socket连接并将socket加入到自己的进程map中,然后客户端发送消息给服务器,服务器接受到消息后,将消息分解然后通过自己再发送给接受者的客户端程序,至此一次通讯结束。
4.2.2总功能模块
经过分析,系统的功能结构图如图4-5所示。
图4-5系统功能模块图
系统功能描述如下,服务器端开启和关闭服务器的功能,以及对数据库的操作,包括增删改查的数据操作,客户端有注册,注册成功后有登陆、聊天、增加好友删除好友等功能。
4.2.3系统用例图
客户端系统的用例图,如图4-6所示。
图4-6客户端系统用例图
用户通过注册和登陆使用客户端系统的功能,首先必须注册成为该系统的用户,然后登陆该系统进行聊天,以及添加好友和删除好友。
客户端注册用例分析如表4-3所示。
表4-3客户端注册用例列表
用例标识号
01
用例名称
用户注册
创建者
***
创建时间
***
执行者
用户
说明
用户填写注册信息,通过服务器验证后可以使用该系统
先决条件
用户进入注册界面
请求结果
系统将用户信息写入数据库
优先级
H
使用频度
H
普通过程
执行者行为
1.点击注册
3.填写个人信息,完毕后点击‘确定’提交
系统响应
2.显示注册界面
4.系统校验用户的输入,如果合法,则会进入数据库验证环节,如果验证成功,则返回登陆成功信息
可选过程
例外
可选过程1:
用户注册验证不通过
1.1系统继续保持注册界面,并显示错误提示信息“******”。
可选过程2:
用户注册信息不完整
2.1系统继续保持注册界面