基于java的即时通信软件设计与实现.docx
《基于java的即时通信软件设计与实现.docx》由会员分享,可在线阅读,更多相关《基于java的即时通信软件设计与实现.docx(48页珍藏版)》请在冰点文库上搜索。
基于java的即时通信软件设计与实现
学号
2009222413
分类号
TP311
本科生毕业论文(设计)
题目:
基于java的即时通信软件设计与实现
院(系)电子与信息工程系
专业电子信息工程
班级2009级2班
学生姓名
指导教师(职称)
提交时间二〇一三年五月
版权声明
任何收存和保管本论文各种版本的单位和个人,未经本论文作者同意,不得将本论文转借他人,亦不得随意复制、抄录、拍照或以任何方式传播。
否则,引起有碍作者著作权之问题,将可能承担法律责任。
原创性声明
本人郑重声明:
所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。
除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品或成果。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明,本声明的法律结果由本人承担。
论文作者签名:
日期:
年月日
基于java的即时通信软件设计与实现
李毅
(安康学院电子与信息工程系,陕西安康,725000)
摘要计算机网络技术高速发展的今天,即时通讯越来越方便,使得通信软件也变得越来越重要,所以本文做了一个即时通信软件,该软件主要是基于Java平台,采用C/S结构客户端和服务器端通过Socket发送和接收消息,并遵循java的面向对象的设计原则。
该软件使用MyEclipse开发工具,服务器端的设计和实施过程中,使用多线程技术,它可以在一个程序中同时运行多个不同的线程,执行不同的任务,大大提高服务器资源的利用率。
数据库管理系统用Oracle完成,并通过JDBC桥访问数据库。
聊天系统将完成好友登陆、验证登陆、多人互相聊天、新用户注册、添加好友、删除好友、修改个人资料等功能。
关键词即时聊天;系统;Java;C/S
InstantcommunicationsoftwareDesignandPlementationBasedonJava
LIYI
(DepartmentofElectronicandInformationEngineering,AnkangUniversity,Ankang,725000)
AbstractWiththerapiddevelopmentofcomputernetworktechnologynowadays,instantcommunicationbecomesmoreandmoreconvenient.Sosoftwareforcommunicationismoreandmoreimportantatthesametime.Thispaperisaboutainstantcommunicationsoftware.ThesoftwareismainlybasedonJavaplatform.usingC/Sstructure,anditsclientandserverreceivemessagesthroughtheSockettosend,objectingtheprinciplesofJava.What’smore,MyEclipseisusedinthesoftwareasthedevelopmenttools,andintheprocessofdesignandimplementation,theserverusesthemulti-threadingtechnology,whichcanbeanumberofdifferentthreadsrunningsimultaneouslyinaprogram,makingitperformdifferenttasks,andgreatlyimprovingtheserverresourceutilization.Databasemanagementsystems,completeswithOracle,andmakeanaccesstothedatabasethroughtheJDBCbridges.Chatsystemhasthefunctionoffriendslogining.Verifyinglogining,multi-chatwitheachother,andthenewuserregistration,addfriends,deletefriends,modifypersonalinformationandotherfunctions.
KeyWordsInstantMessager;System;JAVA;C/S
第一章绪论
1.1引言
随着科学技术的发展,人类目前已经处于信息时代。
人和人之间的信息交流具有了多种途径。
不仅可以面对面的直接交流,还可以借助于一些先进的工具如电话、网络等实现远程交流。
人们最为熟悉的QQ就是实现远程交流的应用典范。
针对企业的专业化即时通讯也迅速成长,具备安全性和多用途的互动办公通讯软件平台随之诞生,它们大都集成文字、声音、视频、屏幕、即时邮件、文件共享与下载的诸多功能,能满足用户的各种需要。
并且即时通讯技术有将无线通讯融入计算机网络的趋势,其前景是非常光明的。
本课题研究的是支持内部网络交流的系统——网络即时通讯系统。
1.2课题研究背景
即时通讯系统是一种非常便捷的网络通讯技术,利用互联网建立起网络虚拟环境,通过计算机键盘或无线设备在网络上进行实时信息交流,成为一种提供公共通讯、商务通讯及商务合作的新媒介,同时也弥补了传统通讯形式的不足,尤其是电子邮件及语音通信方面的不足。
即时通讯工具在实现传输视频与音频信息,使协作成员可以远距离进行直观、真实的文字交流的同时,利用多媒体的技术,它还可以帮助使用者对工作中各种信息进行处理。
随着即时通信普及,全球即时通信用户的数量也不断增长。
目前即时聊天系统种类众多,功能也较为齐全,但MSN、QQ等公共消息系统,由于聊天对象及内容的不可控,若在企业内部使用,可能会降低工作效率。
本文所研究的即时通讯系统的应用目标定位于企业内部网络,将自己的服务器端安装在企业内,并且人员的创建是由系统管理员来完成,因此很好的解决企业或单位的信息沟通及协同问题,提高工作效率。
在该系统中,企业内部员工可以利用该通讯系统随时随地发送文字消息,系统包括客户端程序和服务器端程序,支持局域网和Internet。
企业内部员工之间可以在内部网覆盖的任何地点、任何时间进行即时交流,帮助实现企业内部协同工作。
即时通讯带给了更大的互动性,人们在交流彼此的看法、意见时,发现采用你来我往的方式达到的效果最为明显。
这就体现了互动性。
通过使用及时通讯系统,大家不需要借助其它额外的工具,就可以在线实时地交流工作,即时通信软件是网络软件的一个重要应用,构造的成本低、实时性好、网上交流平台便捷的特点决定了它的普及性,使其成为了在互联网上和他人联系的重要方式,应用于企事业单位内部的即时通讯软件,可以推动政府机构、大型事业单位信息化的建设!
因此开发该类型即时通讯软件也就具有重要的意义。
1.3系统实现的关键技术
(1)系统开发语言选择
经过认真的讨论分析,最终决定选择纯面向对象的Java语言来完成本项目的设计和实现,下面对Java语言作简要介绍。
Java是一种简单、多线程、安全、容易适用、可移置、面向对象、高性能的语言。
具有以下特点:
面向对象:
面向对象技术可以提高模块化程度和重复使用率,缩短软件开发时间降低开发成本。
安全性:
Java提供了许多安全机制,是一种能应用于网络和分布环境下的程序设计语言。
多线程:
Java具备内建的多线程功能使各线程并发、独立执行提高系统的运行效率。
平台独立:
平台独立是指程序不受操作平台限制可以应用于各种平台。
Java源程序经过编译后能够生成字节码文件,字节码和具体的计算机无关。
计算机安装能解释执行字节码的JVM就能执行字节码文件实现了Java的平台独立性。
执行效率:
Java程序的开发通常需要经过编写源程序、编译生成字节码和运行三个过程。
这一编译过程同C/C++的编译有些不同,C编译器编译时,该代码是为在某一特定硬件平台运行而形成的,在编译过程中,编译程序通过查表将所有对符号的引用转换为相应的内存偏移量,以保证程序运行。
而Java编译器却不将对方法和变量的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。
Java应用程序的开发周期包括编译、下载、解释和执行几个部分。
这样就有效的保证了Java的运行效率。
(2)系统架构
经过分析,我采用的软件架构是C/S架构,C/S就是指客户机/服务器模式,客户机向服务器发出数据请求,服务器将数据进行计算,计算完毕后,将计算结果返回给服务器,形成客户端和服务器之间的交互。
具体的讲,就是在主机终端模式中,把原来全部集中在主机部分的任务一分为二。
一部分是仍然保留在主机上的负责集中处理和汇总运算,成为服务器;而另一部分是下放到终端的部分,主要负责为用户提供友好的交互界面,称为客户机。
相对于以前的模式,C/S模式最大的改进是不再把所有软件都装进一台计算机,而是把应用系统分成两个不同的角色和两个不同的地位,一般在运算能力较强的计算机上安装服务器端程序,而在一般的PC上安装客户机程序,这样就可以把主机端的一部分工作放在客户机端完成,从而减轻了主机的负担,也增加了系统对用户的响应速度和响应能力,从而提高工作效率。
这种模式的优点充分利用了客户机的性能,使计算能力大大提高;另外,由于客户机和服务器之间的通讯是通过网络协议进行的,是一种逻辑的联系,因此在物理上客户机和服务器两端是易于扩充的。
(3)信息通信技术
本系统实现信息通信主要是用Socket来实现的,Socket是网络编程中最常见的客户/服务器模式。
可以想象一条虚拟的电缆工作在两台计算机之间,两台计算机都有一个Socket,也就是端口,电缆插在两台计算机的Socket上,一台计算机上的Socket同另一台计算机通话创建一个通信信道,我们可以利用这个信道在两台机器之间发送数据。
用该模式编程时,服务器端有一个进程或多个进程在指定的端口等待客户来连接,一旦连接成功,便按设计的数据交换方法和格式进行数据传输。
客户端向服务器端提出连接请求,连接之后进行通信。
1.4本文工作及内容安排
本文主要是通过java语言以及局域网实现一个QQ聊天系统。
第一章介绍了论文的课题背景,阐述了课题的目的与意义,概述了项目设计实现所要采用的一些关键技术;第二章对系统的需求进行分析,主要包括即时聊天消息的功能需求,即时消息的协议需求,即时信息加密和鉴别等通信息安全方面的需求;第三章介绍了系统设计,即时聊天系统的实施原理,软件设计流程,功能模块划分;第四章介绍了数据库的概要设计;第五章详细设计,服务器端的设计与实现,注册处理模块,客户端的设计与实现,以及聊天信息发送与接收;最后一章对本文所做的工作进行全面的总结,并指出了工作中的不足。
第二章系统的需求分析
2.1项目设计的需求描述
设计一个基于JAVA的网络即时通信系统,在通用计算机网络上实现信息传递,包括基本的文本消息传递,实时获取联系人状态,对常用联系人进行管理等。
主要考虑以下基本功能,注册并登录服务器,验证用户,获得用户列表,用户运行客户端程序后,服务器端程序在局域网上运行,与其他用户进行点对点的实时消息通信服务。
2.2服务器端需求
处理用户登录,当用户到达登陆界面时,用户发送账号、密码等信息进行分装,服务器接受到用户发送的登陆账号、密码;验证用户登录,服务器将用户登陆发送的账号和密码,与数据库中已有的用户进行匹配,如果能能找到,那么就验证成功,找不到该用户,验证失败;处理用户发送信息和处理用户得到信息,用户可以通过对话框和自己的好友进行文字类的交流,可以发送消息,同时也可以接受好友消息;处理用户退出,关闭服务器等。
2.3客户端需求
用户注册界面及结果,可以将用户的姓名、性别、年龄等信息分装,添加到用户数据表中,然后用户可以根据注册的账号、密码进行登录;用户登录界面及结果,用户进入登陆界面,填写自己的账号、密码,然后将其提交给服务器;用户验证界面及结果,根据服务器验证的结果,验证成功,用户可以进入登陆成功界面,验证失败,用户会得到一个登陆失败界面;用户发送信息界面及结果,用户可以双击自己的好友,然后弹出一个对话框,可以和自己的好友进行交流;用户得到信息界面及结果,当好友给自己发送消息时,用户自己的好友界面端,好友头像闪动,然后点击好友头像上,就可以接受到好友的消息。
2.4对于发送的消息的一些协议需求
发送的消息必须至少使用一种消息格式,格式必须包含一个让接收者可以回消息的地址、发信者和即时收件箱的标识,以及允许对信息有效负载的编码和鉴别(非ASCII内容),而且即时消息格式必须提供扩展和注册即时消息格式的模式机制。
这种模式机制,可以保证即时消息成功投递或者投递失败的时候,发信者获得足够的信息。
即时通讯协议,是指参与的双方或者多方通讯时所达到的共识。
协议必须是双方或者多方参与的,一方单独完成的就不算协议。
这样在协议动作的过程中,双方必须交换信息,包括控制信息、状态信息等等。
这些信息的格式必须是协议参与方同意并且遵循的。
好的协议要求清楚、完整,每一步都必须有明确的定义,并且不会引起误解;对每种可能的情况必须规定具体的动作。
本文的即时通讯协议必须提供方法保证即时消息的置信度,让即时信息未被监听、破坏、重排序或者回放,同时还必须保证即时消息被正确的实体阅读。
第三章系统设计
3.1软件设计流程
因为该系统其需求是十分明确的,所以该系统的开发流程采用瀑布模型进行设计,分为几大步骤:
先进行需求分析,再是系统设计,然后是详细设计与编码,其次是软件的测试,最后是软件的运行和维护。
在实际过程中这些步骤经常是重叠和彼此间有信息交换,它不是一个简单线性过程,而是包括开发步骤的多个反复。
如图1所示。
图1即时通讯系统开发瀑布图
3.2即时聊天系统的实施原理
3.2.1工作方式和技术原理
第一步,用户输入自己的用户名和密码登录服务器,服务器通过读取用户数据库来验证用户身份,如果验证通过,登记用户的IP地址、客户的姓名及时间,然后返回用户登录成功的标志。
第二步,根据用户存储在服务器上的好友列表,服务器将用户在线的相关信息发送给也同时在线的好友的PC机,这些信息包括在线状态、IP地址等,好友的客户端收到此信息后将其显示在客户端界面上。
第三步是服务器把用户存储在服务器上的好友列表及相关信息回送到他的客户端机,这些信息包括也在线状态、IP地址等信息。
用户应用流程图如图2所示。
图2用户体验流程图
3.2.2通讯方式
(1)在线直接通讯
如果用户想与他的在线好友用户聊天,他将直接通过服务器发送过来的用户好友的IP地址、TCP端口号等信息,直接向用户好友的PC机发出聊天信息,用户好友的客户端软件收到后,头像闪动,双击弹出对话框,显示在屏幕上,然后用户好友再直接回复到用户的PC机,这样双方的即时文字消息就不在服务器中转,而是直接通过网络进行点对点的通讯。
(2)在线代理通讯
用户与用户好友的点对点通讯由于防火墙、网络速度等原因难以建立或者速度很慢,服务器将会主动提供消息中转服务,即用户和用户好友的即时消息全部先发送到服务器,再由服务器转发给对方。
3.3功能模块划分
3.3.1服务器端
服务器端完成至少3大功能:
建立连接、存储数据和监听客户。
这3大功能的具体含义如下:
(1)建立一个ServerSocket连接,不断侦听是否有客户端连接或者断开连接。
(2)服务器端是一个信息发送中心,所有客户端的信息都传到服务器端,再由服务器根据要求分发出去。
(3)数据库数据操作包括将用户信息存储到数据库等。
服务器端功能结构如图3。
图3服务器端功能结构图
3.3.2客户端
客户端要完:
用户登录、读取用户、通信交流这些功能。
这些功能的含义如下:
(1)用户登录:
客户端与服务器端建立通信信道,向服务器端发送信息,完成用户登录。
(2)通信交流:
客户端可完成的信息的编辑、发送和接收等功能。
该即时聊天工具按如下过程完成通信,客户向服务器登陆,告知服务器该客户监听某主题;客户登陆之后,向服务器发送消息;服务器再把消息发送给所有监听此主题的客户。
客户端功能模块结构如图4
图4客户端功能模块图
第四章数据库概要设计
4.1系统实体及实体关系图
经过本人对系统数据信息的分析,设计了有用户实体、好友列表实体两个实体。
用户实体属性包括了用户编号、昵称、密码、签名、性别、生日、在线头像、离线头像、消息头像等;好友列表实体包括了功能ID、用户编号、好友编号等属性。
用户好友实体和好友列表实体E-R图如图5。
图5实体关系图
根据实体关之间系,数据库设计了用户表(登录用户)、好友表(friends),另外为了方便编写用户的登陆状态和直观的表示服务器端,又添加了在线状态表(logtype)和登陆表。
用的数据库是oracle10,对数据库表进行操作的软件工具是PLSQLDeveloper,下面将对这五张表进行详细说明。
4.2用户表
用户表主要是记录每个用户自己的信息,包括自己的qq号、昵称、密码、签名、性别、生日、在线头像、离线头像、消息头像等这些字段。
其中qqnum和qqsex为数字类型,qqname、qqpass、qqdesc为字符串类型,而在线头像、离线头像、消息头像是大数据类型,生日是日期类型,主键是qqnum。
主键为了标识一条记录的唯一性,保证每条记录应当具备惟一性,一张表里只有一个主键,而且主键不能为空,如表1。
表1用户信息表
标识
字段
类型
精度
是否主键
是否外键
编号
qqnum
number
10
是
否
昵称
qqname
varchar2
20
否
否
密码
qqpass
varchar2
20
否
否
签名
qqdesc
varchar2
100
否
否
性别
qqsex
number
1
否
否
生日
qqbirthday
date
否
否
在线头像
qqolpic
blob
否
否
离线头像
qqofpic
blob
否
否
消息头像
qqmespic
blob
否
否
4.3好友表(friends)
好友表主要反应的是该qq好友和好友之间的关系。
friid、qqnum、frinum都是数字类型的。
其中friid是主键,qqnum是外键。
外键表示了两个关系之间的联系。
以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
外键又称作外关键字。
主键与外键用于区分不同的记录便于查询。
外键又称作外关键字。
一张表中可以有多个外键,但这些外键必须是其它表的主键,如表2。
表2好友表
标识
字段
类型
精度
是否主键
是否外键
功能ID
Friid
number
10
是
否
编号
Qqnum
number
10
否
是
好友编号
Frinum
number
10
否
是
4.4在线状态表(logtype)
在线状态表主要是反应用户的登陆状态的表。
Typeid是数字类型,typename、typedesc是字符串类型。
其中初始化数据时,10代表离线,11代表隐身,12代表在线,如表3。
表3在线状态表
标识
字段
类型
精度
是否主键
是否外键
状态ID
typeid
number
2
是
否
状态名称
typename
varchar2
10
否
否
状态描述
typedesc
varchar2
100
否
否
4.5登陆表
登陆表主要是将登陆的用户信息反映到服务器端,服务器端显示每个登陆的用户信息。
其中qqnum、typeid是字符类型的,logip是字符串类型的,logtime是日期类型的,而且qqnum即时这张表的主键,也是这张表的外键,同时typeid也是这张表的外键,如表4。
表4服务器端登陆表
标识
字段
类型
精度
是否主键
是否外键
编号
qqnum
number
10
是
是
状态ID
typeid
number
2
是
登陆IP
logip
varchar2
15
登陆时间
logtime
date
4.6离线信息表
离线表主要是方便用户不在线时,将离线信息存储在这个表中,当用户登录时,将信息显示给用户。
其中ID是number类型的,fromuserid、touserid、message是字符串类型的,同时编号ID是这张表的主键。
如表5。
表5离线信息表
标识
字段
类型
精度
是否主键
是否外键
编号
Id
number
10
是
用户账号
fromuserid
varchar2
10
好友账号
touserid
varchar2
10
留言信息
message
varchar2
100
第五章详细设计
5.1服务器端的设计与实现
C/S模式下的系统开发,很显然服务器端程序的设计是非常重要的。
下面就服务器端的相关程序模块进行设计,并一定程度上实现了相关功能。
使用SeverSockets=newServerSocket(端口)语句在端口创建套接口;使用newServerThread(socket)语句创建新的线程。
服务器类调用ServerThread类,而每个ServerThread实体就是一个独立的线程,刚好对应于客户端的连接请求响应线程。
每一个客户登陆,如果验证成功,将会显示在服务器端。
为了更好的显示后台服务器端,设计了相应的服务器端图形界面,如图6。
图6服务器端界面
当服务器打开时会同时监听登陆线程(LoginListener)类、监听消息线程(MesListener)类这三个线程。
登陆线程(LoginListener)类主要是负责服务器的用户登陆显示、发送给登陆用户好友列表、发送给登陆用户其在线好友,通知上线信息等。
在服务器的登录表注册登录,并更新登陆显示的主要代码为:
win.getDao().addLoginUser(lm);
win.setTmodel(win.getDao().getLoginModel());
win.getTab().setModel(win.getTmodel());
发送给登陆用户好友列表的主要代码为:
ArrayListfriList=win.getDao().getFriendsList(lm.getQqnum());
SendModel.sendFriList(lm,friList);
发送给登陆用户留言
MesMod