基于JAVA的聊天系统的设计与实现课程设计说明书.docx
- 文档编号:27123694
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:78
- 大小:751.88KB
基于JAVA的聊天系统的设计与实现课程设计说明书.docx
《基于JAVA的聊天系统的设计与实现课程设计说明书.docx》由会员分享,可在线阅读,更多相关《基于JAVA的聊天系统的设计与实现课程设计说明书.docx(78页珍藏版)》请在冰豆网上搜索。
基于JAVA的聊天系统的设计与实现课程设计说明书
毕业论文声明
本人郑重声明:
1.此毕业论文是本人在指导教师指导下独立进行研究取得的成果。
除了特别加以标注地方外,本文不包含他人或其它机构已经发表或撰写过的研究成果。
对本文研究做出重要贡献的个人与集体均已在文中作了明确标明。
本人完全意识到本声明的法律结果由本人承担。
2.本人完全了解学校、学院有关保留、使用学位论文的规定,同意学校与学院保留并向国家有关部门或机构送交此论文的复印件和电子版,允许此文被查阅和借阅。
本人授权大学学院可以将此文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本文。
3.若在大学学院毕业论文审查小组复审中,发现本文有抄袭,一切后果均由本人承担,与毕业论文指导老师无关。
4.本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。
论文中凡引用他人已经发布或未发表的成果、数据、观点等,均已明确注明出处。
论文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的研究成果做出重要贡献的个人和集体,均已在论文中已明确的方式标明。
学位论文作者(签名):
年月
关于毕业论文使用授权的声明
本人在指导老师的指导下所完成的论文及相关的资料(包括图纸、实验记录、原始数据、实物照片、图片、录音带、设计手稿等),知识产权归属华北电力大学。
本人完全了解大学有关保存,使用毕业论文的规定。
同意学校保存或向国家有关部门或机构送交论文的纸质版或电子版,允许论文被查阅或借阅。
本人授权大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存或编汇本毕业论文。
如果发表相关成果,一定征得指导教师同意,且第一署名单位为大学。
本人毕业后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为大学。
本人完全了解大学关于收集、保存、使用学位论文的规定,同意如下各项内容:
按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存或汇编本学位论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入学校有关数据库和收录到《中国学位论文全文数据库》进行信息服务。
在不以赢利为目的的前提下,学校可以适当复制论文的部分或全部内容用于学术活动。
论文作者签名:
日期:
指导教师签名:
日期:
课程设计说明书
设计题目:
基于java的聊天系统设计与实现
基于JAVA的聊天系统的设计与实现
摘要
网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。
目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。
该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。
前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。
后者通过与服务器建立连接,来进行客户端与客户端的信息交流。
其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。
开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。
经过分析这些情况,该聊天工具采用Eclipse为基本开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统
关键词:
即时通讯系统B/SC/SMySQLSocketSwing
4.3.1Message类的设计14
4.2.2截图类的设计15
4.2.3聊天记录类的设计16
4.2.4服务器线程类设计17
第1章引言
1.1开发背景
随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。
目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。
无论是个人还是企业等组织机构,对沟通的需求也在不断发展,传统的电话、传真、邮件等沟通方式显然已无法满足当今人们工作和生活沟通的需要。
随着软件、网络和通讯三大现代信息技术的发展,在沟通、协作方面有着更多方便、快捷、实时等优势的即时通讯,成为继电话、E-Mail之后又一个完全融入每个人生活的互联网工具。
Java是一个由Sun公司开发而成的新一代编程语言。
使用它可在各式各样不同种机器、不同种操作平台的网络环境中开发软件。
不论你使用的是哪一种WWW浏览器,哪一种计算机,哪一种操作系统,只要WWW浏览器上面注明了“支持Java”,你就可以看到生动的主页。
Java正在逐步成为Internet应用的主要开发语言。
它彻底改变了应用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。
1.2开发目的和意义
网络通信在当今信息社会中起着不可或缺的作用,人们可以利用网络通信技术进行即时的信息交流。
比如说QQ聊天工具,它就是利用网络通信技术开发的一款众所周知的网络聊天工具。
通讯工具最初虽为聊天而诞生,但其作用早已超出了聊天的范畴,随着企业即时通讯工具的出现,即时信息在网络营销中将发挥更大的作用。
目前,信息交流是互联网提供的主要内容,网络通信系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登录统一的聊天服务器。
考虑到要可以在局域网中应用,本系统使用的是第二种方法,经过设置,在局域网或internet上都可以使用。
1.3研究内容
1、即时通讯原理
首先验证登陆,如果成功,则建立与服务端的socket连接,服务端新开启一个线程专门为它服务,将打包好的Message发送给服务器端,服务器端根据Message里面的信息,再将信息转发给其他用户。
一个标准的C/S模式。
2、Swing技术
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
用来实现客服端的界面设计。
3、Javaweb和struts2技术
采用B/S的结构实现服务器端,对用户和在线用户进行增删改查,和踢用户下线,以及开启服务器和关闭服务器。
4、系统的构建
客户端采用C/S结构,管理端采用B/S的结构,用Tomcat作为服务器,MySQL作为数据库,还使用到了WindowBuilder开源框架进行界面开发。
第2章即时通讯系统的相关研究
2.1C/S开发模式
C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。
对应的优点就是客户端响应速度快。
缺点主要有以下几个:
而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。
这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。
客户端需要安装专用的客户端软件。
首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。
还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。
(大多数没法自动升级而需要人工升级)
对客户端的操作系统一般也会有限制。
可能适应于Windows98,但不能用于Windows2000或WindowsXP。
或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。
2.2B/S开发模式
B/S结构(Browser/Server结构)结构即浏览器和服务器结构。
它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。
在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。
这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。
它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。
特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、速度快、效果优。
2.3即时通讯原理
登陆进入聊天软件后,即显示出好友列表,在线的显示亮头像,不在线的显示灰色头像。
双击好友头像即会显示出聊天界面。
在聊天页面上,有发送文字,发送截图,和发送文件的功能按钮。
点击“发送”按钮之后,程序就会把输入的信息的种类,信息内容、本人的ID号、对方的ID号以及当前的时间等内容打包成一个Message对象通过Socket发送到服务器端。
服务器接收到Message之后,按照协议进行解析和转发。
这样,双方的即时通讯就实现了。
2.4JavaWeb、struts2、Ajax、javascript应用技术
通过这些技术,实现服务器的后台管理端,对用户和在线用户进行增删改查,和踢用户下线,以及开启服务器和关闭服务器。
以及用户的注册,前台验证等等
2.5MySQL数据库应用技术
使用MySQL存储用户信息,采用JDBC技术对其进行增删改查。
2.6Socket通信技术
Socket程序的工作过程:
1、建立Socket连接:
在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。
2、数据通信:
利用虚拟连接通道传送数据信息进行通信。
3、关闭:
通信结束时,再将所建的虚拟连接拆除。
具体如下:
服务器
图2-1socket通信
2.7开发环境的搭建
客户端采用C/S结构,管理端采用B/S的结构,用Tomcat作为服务器,MySQL作为数据库,还使用到了WindowBuilder开源框架进行界面开发。
第3章系统分析
3.1系统基本功能描述
客户端可以实现注册,即时聊天,相互之间收发文件,发送截图,查看历史聊天记录等功能。
收发消息时,可以实现离线接收。
服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。
服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。
在后台管理系统,可以到对用户进行增删改查,查看在线用户,和踢用户下线
3.2可行性分析
本系统的可行性分析包括以下几个方面的内容:
(1)技术可行性
使用Swing和socket技术,可以很轻松地开发出实用、简便、高效的基于网络的即时通讯系统。
因此技术上是可以实现的。
(2)经济可行性
计算机网络已经普及,因此在网络设备上不需要进行大的投入。
本系统需要一个MySQL数据库服务器,由于并发使用人数比较少,tomcat可以作为web服务器,所以成本很低。
(3)操作可行性
只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题。
如果要实现internet上通讯,只需要将服务器端运行在一个有固定IP的公网上就可以。
综上所述,即时Java即时通讯系统是可行的。
3.3系统需求分析
3.3.1功能分析
本系统要实现的功能如下:
1)注册
服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别,籍贯,个人资料等,接受完毕后,便通过JDBC与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码。
客户收到服务器返回的信息后,便打开窗口登陆。
2)登陆
在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JDBC读取数据库,然后与用户输入的信息进行比对,如果成功,便打开主程序窗口。
然后客户向服务器请求读取好友名单,服务器收到该请求,从数据库中取出好友列表,然后向客户端发送这些信息,客户收到后就在主窗口显示好友。
3)聊天
客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。
例如服务器接收到一个A发给B的消息,先判断B是否已经在线,如果在线就将信息发送过去。
如果B不在线则把信息储存在服务器,等B上线了在发送给他。
B接收到A发来的信息,如果是未建立对话窗口,则自动打开显示。
4)发送截图
客户端A点击截图按钮,将屏幕锁定,截取图片,将图片储存在byte[]数组中发送到服务器端。
服务器端根据发送人信息和接收者信息来转发。
B接收到A发来的截图信息,会根据byte[]构造图片,将图片显示出来。
同样,如果是未建立对话窗口,则自动打开显示。
5)发送文件
客户端A点击发送文件按键,从本地选择文件,将文件在byte[]数组中分批次发送到服务器端。
服务器端根据发送人信息和接收者信息来转发。
B接收到A发来的文件信息,会根据文件发送的状态和byte[]构造文件。
6)日志
客户端发送和接收到的信息都会储存在文本文档中。
默认储存在C盘下面,会以用户的登录账号为名。
7)对用户的操作
管理员通过B/S的系统对用户进行增加,修改,删除,查找等操作,对系统进行维护。
8)在线用户的操作
管理员通过B/S的系统对在线用户操作,可以踢用户下线。
第4章系统设计
4.1数据库设计
本系统中所涉及的主要实体及其属性有:
用户(用户账号,用户名,密码,个性签名,头像ID,年龄,性别)
E-R模型如图所示。
图4-1系统实体及其属性
表4-1User
字段名
数据类型
字段说明
键引用
备注
account
int(6)
ID
PK
主键(自动增一)
name
varchar(20)
用户名称
非空
password
varchar(20)
用户密码
非空
signature
Varchar(255)
签名
profileID
int
(2)
头像ID
age
int(3)
年龄
sex
sexchar
(2)
性别
4.2系统模块设计
4.2.1聊天系统工作原理图
图4-2系统工作原理
4.2.2系统功能模块图:
图4-3系统模块
4.2.3系统用例图:
普通用户的用例图:
图4-4普通用户用例图
后台管理员的用例图:
图4-5后台用户用例图
4.2.4活动图:
1)用户登陆活动图
首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。
如果不正确,返回一个提示信息。
如果登陆成功,就更新在线状态。
通知所有好友自己已经上线。
服务器再检查是否有他的离线消息,如果有这立即发送给用户。
图4-6用户登录活动图
2)发送消息活动图
短消息发送以后,服务器端对应的监听线程会接收到一个数据包。
此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者。
如果不在线,存在服务器端,等它上线在发送。
图4-7发送消息活动图
4.3系统类设计
4.3.1Message类的设计:
客户端和服务器端通信时,发送的都是Message类的对象,因此Message类的设计很重要。
表4-2Message
属性名
作用
privateIntegermsgType;
信息类型
privateStringcontent;
信息的文本内容
privateIntegersenderAccount;
发送者account
privateIntegerreceiverAccount;
接收者account
privateStringtime;
发送时间
privateUsermyself;
privateList
自己本身对象,用与好友列表头
好友列表
privatetransientImageimg;
图片对象(不传送)
privatebyte[]imageByte;
图片的内容
privateStringfileName;
文件名称
privatebyte[]fileByte;
文件的长度
privateintlength;//文件长度,以KB为单位
文件的内容
privateintstate;
文件传输的状态:
0是不接受文件,1是接受文件,2请求发送文件,3文件传输中,4文件传送完成
privateIntegermsgType消息的类型有这么几种:
publicinterfaceMessageType{
Integermessage_succeed=1;//表明是登陆成功
Integermessage_login_fail=2;//表明登录失败
Integermessage_comm_mes=3;//普通信息包
Integermessage_get_onLineFriend=4;//要求在线好友的包
Integermessage_ret_onLineFriend=5;//返回在线好友的包
Integermessage_offline=6;//下线通知包
Integermessage_img=7;//图片包
Integermessage_file=8;//文件包
}
4.3.2截图类的设计:
截图类的实现类为:
classScreenshotextendsJFrameimplementsMouseListener,MouseMotionListener。
图4-8Screenshot类
截图类的核心是JDK中:
Robot类中createScreenCapture(Rectangle screenRect)创建包含从屏幕中读取的像素的图像。
先用截取全部屏幕的图片,然后显示出来,覆盖住整个屏幕。
然后监听鼠标事件,再用createScreenCapture(Rectangle screenRect)方法截图。
双击表示截图成功,右键表示取消截图。
4.3.3聊天记录类的设计:
记录日志的功能被封装在MessageRecord类中,所在包为com.im.client.record,在发送或接受到数据后,将其写入日志文件。
图4-9MessageRecord类
如果是图片则显示出,发送时间和图片大小。
如果是文件则显示出请求发送时间,同意接收时间,接收完成时间,和文件大小。
日志文件格式如下:
图4-10记录文件
4.3.4服务端线程的设计:
服务器端的核心是对应客户的线程,每个socket对应一个线程,也就是每一个客户端都在服务器端有一个相应的线程。
它负责转发客户端发来的消息。
线程类为ClientThread:
表4-3ClientThread类
属性名
作用
publicvoidnotifyOnline()
通知其他线程,自己上线了,让客户方更新头像
publicvoidrun()
线程的主题,转发消息
publicvoidnotifyOffline(){
通知其他线程,自己下线了,让客户方更新头像
publicvoidsend(Objecto)
发送消息
publicObjectreceive()
接收消息
第5章系统实现
5.1实现概况
本系统可分为登录、聊天、文件、用户管理和注册五个功能模块。
“登录”模块为用户提供登录界面,并在用户登录显示好友列表;“聊天”模块实现用户的即时传送信息,即多用户即时聊天,可以发送文字或者截图;“文件”模块主要实现一用户向另一用户发送文件,对方可以选择接受或者拒绝。
聊天记录会以文本文档格式保存。
“用户管理”模块即管理员对用户进行增删改查,和踢用户下线的操作。
下面详细介绍各个模块的具体实现。
5.2注册模块
5.2.1流程图
图5-1用户注册流程图
5.2.2关键代码
注册的前台页面是showDetail.jsp,后台是UserAction类,UserAction类中有方法:
publicStringsaveOrUpdate(){
us.saveOrUpdate(user);
return"refresh";
}
saveOrUpdate则是用到了Userservice里面的方法:
publicvoidsaveOrUpdate(Useru){
System.out.println("u.getAccount()="+u.getAccount());
if(u.getAccount()==null)
ud.save(u);
elseud.update(u);
}
DAO类中的方法:
publicvoidsave(Useru){
conn=getConnection();
try{
ps=conn.prepareStatement(SAVE);
ps.setString(1,u.getName());
ps.setString(2,u.getPassword());
ps.setString(3,u.getSignature());
ps.setInt(4,1);
ps.setInt(5,u.getAge());
ps.setString(6,u.getSex());
ps.execute();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
close();
}
}
网页上显示用户的account
图5-2用户注册信息
5.3登录模块
5.3.1流程图
图5-3登录流程图
5.3.2关键代码
1)客户端代码
登录事件是定义在classIMClientLoginextendsJFrame这个类的监听事件中。
登录成功后,立即向服务器请求自己的好友列表。
//登录事件
login.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//cus=newIMClientUserServer();
//System.out.println(cus.getServer());
Useru=newUser();
u.setAccount(Integer.parseInt(account.getText().trim(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 JAVA 聊天 系统 设计 实现 课程设计 说明书