基于Java的仿QQ聊天系统文档格式.docx
《基于Java的仿QQ聊天系统文档格式.docx》由会员分享,可在线阅读,更多相关《基于Java的仿QQ聊天系统文档格式.docx(37页珍藏版)》请在冰点文库上搜索。
QQ不仅仅是简单的即时通信软件,它与全国多家寻呼台、移动通信公司合作,实现传统的无线寻呼网、GSM移动电话的短消息互联,是国内最为流行功能最强的即时通信(IM)软件,使QQ不仅仅是单纯意义的网络虚拟呼机,而是一种方便、实用、超高效的即时通信工具。
QQ可能是现在在中国被使用次数最多的通讯工具。
它可以在2000/XP/2003/Win7/Win8操作系统下运行,是十分灵活的网络寻呼工具。
它会自动检查您是否已联网,如果您的电脑已连入Internet,可以搜索网友、显示在线网友,可以根据QQ号、昵称、姓名、email地址等关键词来查找,找到后可加入到通讯录中。
当您的通讯录中的网友在线时,QQ中朋友的头像就会显示在线,根据提示就可以发送信息,如果对方登记了寻呼机或开通了GSM手机短消息,即使离线了,您也可及时将信息传递给您的好友。
虽然以上这些软件是免费的,并且功能越来越强大。
但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。
为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。
本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。
1.2涉及的相关技术及协议
1.2.1JAVA语言
经过认真的讨论分析,综合各种计算机高级语言的特征和适应范围,最终决定选择纯面向对象的Java语言来完成课题的设计,下面就技术可行性方面,对Java语言作一简要介绍。
Sun公司的口号就是“网络就是计算机”,Java能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。
使用Java语言,可以相对轻松的一天编写一个有条理的网络程序。
今天,Java的网络功能正在飞跃发展,不断有新的特性增加到这个有价值的基础上,JavaSoft实验室正在不断努力使Java更加完善。
就Java语言的主要特点,本人归纳如下:
Java程序设计的开发过程与运行环境Java是解释型的高级编程语言,所以Java程序的开发通常需要经过编写源程序、编译生成字节码和运行三个过程。
这里要提到,Java应用程序的开发周期包括编译、下载、解释和执行几个部分。
Java编译程序将Java源程序翻译为JVM可执行代码—字节码。
这一编译过程同C/C++的编译有些不同。
当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。
因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。
Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。
这样就有效的保证了Java的可移植性和安全性。
1.2.2C/S模式介绍
20世纪90年代出现并迅速占据主导地位的一种计算模式为客户机/服务器模式,简称为C/S模式,它实际上就是把主机—终端模式中原来全部集中在主机部分的任务一分为二,保留在主机上的部分负责集中处理和汇总运算,成为服务器;
而下放到终端的部分负责为用户提供友好的交互界面,称为客户机。
相对于以前的模式,C/S模式最大的改进是不再把所有软件都装进一台计算机,而是把应用系统分成两个不同的角色和两个不同的地位:
一般在运算能力较强的计算机上安装服务器端程序,而在一般的PC上安装客户机程序。
正是由于个人PC机的出现使客户机/服务器模式成为可能,因为PC机具有一定的运算能力,用它代替了上面第一种模式的哑终端后,就可以把主机端的一部分工作放在客户机端完成,从而减轻了主机的负担,也增加了系统对用户的响应速度和响应能力。
客户机和服务器之间通过相应的网络协议来进行通讯。
客户机向服务器发出数据请求,服务器将数据传送给客户机进行计算,计算完毕,计算结果可返回给服务器。
这种模式的优点充分利用了客户机的性能,使计算能力大大提高;
另外,由于客户机和服务器之间的通讯是通过网络协议进行的,是一种逻辑的联系,因此物理上在客户机和服务器两端是易于扩充的。
C/S模式是目前占主流的网络计算模式。
该模式在操作过程中采取的是主动请示方式:
首先服务器方要先启动,并根据请示提供相应服务(过程如下):
(1)打开一个通信通道同时通知本地主机,服务器愿意在某一个公认地址上接收客户请求。
(2)等待某个客户请求到达该端口。
(3)接收到重复服务请求,处理该请求并发送应答信号。
(4)返回第二步,等待另一客户请求。
(5)关闭该服务器。
客户端:
(1)打开一个通信通道,并连接到服务器所在主机的特定端口。
(2)向服务器发送服务请求报文,等待并接收应答;
继续提出请求。
(3)请求结束后关闭通信通道并终止。
分布运算和分布管理是客户机/服务器模式的特点。
最后选择了C/S模式。
第二章系统分析
2.1可行性分析
(1)经济可行性:
本系统需要一个oracle数据库服务器,由于使用人数比较少,安装一个免费的oracle数据库完全可以应付需要,所以成本就不用考虑了。
(2)操作可行性:
只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题。
(3)技术可行性:
本系统采用Java语言,是基于CS架构的。
开发这个系统需要开发者对socket编程和javaSwing这两方面的技术比较熟。
由于本人长期从事于java语言编程,所以技术方面是可行的。
2.2需求分析
2.2.1功能分析
本系统要实现的功能如下:
1)注册
服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别,籍贯,个人资料等,接受完毕后,便通过Jdbc-Odbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码。
客户收到服务器返回的信息后,便打开主登陆窗口。
2)登陆
在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JdbcOdbc读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口。
然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的表,得到好友的号码后,再在icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个矢量(Vector)用以存储好友的呢称,号码。
3)私聊
私聊就是两个聊天。
客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。
例如服务器接收到一个A发给B的消息先判断B是否已经在线,如果在线就将信息发送过去。
B接收到A发来的信息,如果是未建立对话窗口,就询问是否建立对话,否则就丢弃信息。
4)群聊
群聊,就是多人一起聊天。
过程与私聊差不多。
唯一的不同就是服务器会将信息转发给指定群的所有成员。
5)创建分组
用户注册以后默认的好友分组只有一个。
用户在执行添加分组操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)。
服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的分组信息插入到数据库中。
如果成功,则返回这个分组的信息给客户端,否则返回错误提示信息。
6)创建群
用户注册以后群个数为0。
用户在执行添加群操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)。
服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的群信息插入到数据库中。
如果成功,则返回这个群的信息给客户端,否则返回错误提示信息。
7)查找好友并加为好友
输入要查找的用户ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。
打开一个用户信息显示界面,该界面会提供一个“添加为好友”按钮,点击后可将此人加为好友。
如果未找到,弹出一个信息提示框。
8)查找群并加入群
输入要查找的群ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。
打开一个群信息显示界面,该界面会提供一个“加入此群”按钮,点击后可将此人加为好友。
如果未找到,则弹出一个信息提示框。
9)文件共享
在启动文件传输服务器的共享文件功能之前,要设置它的IP号和端口,如果设置不好。
好友将无法下看到这些共享的文件。
还有一个重要的步骤就是添加共享文件或目录。
最后启动文件共享。
10)下载文件
使用文件传输的客户端要正确配置好服务器的IP和端口号,以及下载好的文件的存放目录。
如果其中之一配置不好,文件下载将会失败。
设置好以后,点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件。
目前不能支持文件夹下载,当看到一个文件夹以后,可以双击该文件夹并查看文件夹里面的文件。
2.2.2性能分析
本系统由于采用免费的oracle数据库软件,连接数最多不能超过200,所以并发访问数据库的人数不能超过200人。
2.2.3用例图
2.2.4时序图
客户登陆、注册时的服务器端时序图
本图说明:
服务器接每次与一个客户连接以后,就会去创建一个监听线程。
通过线程来接收客户端发送的所有数据。
如果要查询数据库,监听线程会请求获得一个数据库连接.如果数据库连接已经获得,就把连接交给DBOperation对象,通过此对象可以返回给监听线程必要的结果。
最后监听线程会通过Socket将结果返回给客户端。
2.2.5活动图
1)用户登陆
活动图
(见右图)
本图说明:
首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。
如果不正确,返回一个提示信息。
如果登陆成功,就更新在线状态。
通知所有好友自己已经上线。
2)客户之间的通信活动图
短消息发送以后,服务器端对应的监听线程会接收到一个数据包。
此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者。
如果不在线,就写入数据库。
3)客户之间的文件传送活动图
本图说明:
客户端向服务器发送文件下载请求。
如果服务器端同意下载,就读取文件流并将数据流写入到客户端。
客户端读取到文件名之后,立刻创建一个新的文件并将读取的数据写入到文件中。
4)新增好友活动图
根据好友ID号查找好友,如果此ID存在,就将用户信息发送到客户端。
同时将好友关系写入到数据库。
5)删除好友活动图
此图说明:
客户向服务器发送删除好友请求。
服务器接收到删除好友请求以后,将好友关系从数据库中删除。
第三章总体设计
3.1功能模块图
本系统主要由由两个子系统组成:
1)文件传输系统;
2)聊天子系统。
文件传输系统的功能主要有:
1)共享文件;
2)查看并下载文件。
聊天子系统的功能有:
1)注册;
2)登陆;
3)添加群;
4)查找群;
5)私聊;
6)群聊;
7)查看好友资料;
8)查找好友;
9)添加好友;
10)创建好友分组。
3.2数据库设计
3.2.1E-R图
用户表(QQUser):
属性:
id,account(登陆账号),pwd,nickname,sign(个性签名),sex,email,head(头像)
关系:
一个用户可以有多个好友分组。
一个用户可以有多个群。
一个用户可以有多条留言。
好友分组表(Qqperson_group):
属性:
id,userid(创建者ID),name(分组名)
关系:
一条记录只对应一个用户,但是可以拥有多个组成员。
群表(Qqpublic_group):
id,userid(创建者ID号),name(群名),sign(群公告)
一个群只有一个创建者,但是可以拥有多个群成员。
3.2.2表结构设计
客户信息表(qquser)
1
自动id号
Id
整数
2
用户账号
Account
3
用户密码
Pwd
字符
4
用户昵称
Nickname
5
用户签名
sign
6
用户性别
Sex
7
用户邮箱
email
8
用户头像
Head
Qq消息表(QQMessage)
自动ID
ID
发信人
Account_from
收信人
Account_to
发送内容
Content
用户分组表(qqpersongroup)
拥有者Id
userid
分组名称
name
公共群表(qqpublic_group)
创建人
群名称
群的公共消息
用户与群的中间表(qquser_publicgroup)
加入的群ID
groupid
加入的用户的ID
用户与分组的中间表(QQuser_persongroup)
加入的分组的id
加入分组的用户的id
以上各表创建的代码如下:
1)创建用户表
createtableqquser(
numberprimarykey,
accountnumberunique,
nicknamevarchar(100),
signvarchar(500),
sexvarchar(10),
emailvarchar(100),
headvarchar(200));
2)创建分组表
createtableqqperson_Group(
idnumberprimarykey,
useridreferencesqquser(id),
namevarchar(100));
3)创建群表
createtableqqpublic_group(
useridnumberreferencesqquser(id),
namevarchar(100),
signvarchar(800));
4)创建消息表
createtableqqmessage(
account_fromnumber,
account_tonumber,
contentvarchar(1000));
5)创建用户与群的中间表
createqquser_publicgroup(
groupidnumberreferencesqqpublic_group(id),
useridreferencesqquser(id);
);
6)创建用户与分组的中间表
createqquser_persongroup(
useridreferencesqquser(id));
7)为用户表插入数据
insertintoqquservalues(1,1,'
long'
,'
I'
mlong'
male'
******************'
48.gif'
insertintoqquservalues(2,2,'
a'
aa'
********'
insertintoqquservalues(3,3,'
b'
bb'
insertintoqquservalues(4,4,'
c'
cc'
insertintoqquservalues(5,5,'
d'
dd'
8)为分组表和群表插入数据
insertintoqqperson_groupvalues(1,1,'
myfriend'
intoqqpublic_groupvalues(1,1,'
haha'
mynewgroup'
9)为用户与群中间表插入数据
insertintoqqperson_group(1,1,1);
insertintoqqperson_group(1,1,2);
insertintoqqperson_group(1,1,3);
insertintoqqperson_group(1,1,4);
insertintoqqperson_group(1,1,5);
10)为用户与分组中间表加入数据
insertintoqqpublic_group(1,1,1);
insertintoqqpublic_group(1,1,2);
insertintoqqpublic_group(1,1,3);
intoqqpublic_group(1,1,4);
insertintoqqpublic_group(1,1,5);
3.3类图
Socket:
非自定义类,.Socket。
Thread:
非自定义类,java.util.Thread。
Client:
负责具体发送和接收数据。
FromServerListen:
监听服务器是否在发送数据。
MainFrame系统的主界面(包括用户列表等)。
QQUserInfo包括用户的好友分组信息和群信息。
QQUserClass包括用户的个人信息,如ID、用户名等。
第四章详细设计及实现
4.1界面设计
1)登陆界面
本界面需要填写的有两个,一个是用户账号,另一个是用户密码。
在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过Jdbc方式读取数据库,然后与用户输入的信息比较,否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。
如果成功,便打开主程序窗口。
然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的friend表,得到好友的号码后,再在好友表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个Vector用以存储好友的信息。
2)注册界面
本界面要填写的项目包括:
用户昵称,密码,邮件地址,个性签名。
需要选择的项目包括:
性别,头像。
本界面主要负责将用户的信息包装成一个QQUserClass对象。
注册按钮一旦被点击,就会试图创建一个与服务器端的连接。
连接创建成功就会将填写的信息发送到服务器端。
如果服务器写入数据库成功,就回返回一个账号。
使用这个账号,用户可以登陆到系统中。
3)主界面(如右图)
主界面是系统的核心部分。
它可以列出所有好友和客户所有加入的群,也可以提供共享文件和文件下载功能。
如果用户服务双击好友分组或群,好友列表或群成员列表将会显示出来。
双击一个好友,可以与他进行私聊。
双击一个群成员,可以与群里的所有成员对话。
本界面还提供了以下右键菜单:
添加好友分组、查找好友并加为好友、查找群并加为群、创建群、移动好友到其它分组、查看好友资料、查看群资料。
4)个人资料界面(如下图)
该界面主要显示某个用户信息,包括用户的账号,昵称,性别,个性签名,用户等级等。
本界面还提供了一个“加为好友”按钮,如果点击它,此人将会被加为用户的好友。
默认的是加到第一个好友列表,不过也可以移动其它好友分组。
5)文件传输服务器端界面
该界面使用的步骤为:
第一步:
设置好服务器的IP,端口。
IP一定要是本机的IP,如果是单机测试,IP可以填写“127.0.0.1”。
端口号尽量不要小于2000,小于两千的端口可能被系统占用。
设置完后点击“确定”按钮。
第二步:
添加共享文件。
单击“添加文件共享”按钮,将需要共享的文件或文件夹添加到共享列表中。
第三步:
点击“启动文件发送服务”。
第四步:
如果共享文件完毕,需要点击“退出”。
6)文件传输客户端界面
目前不能支持文件夹下载和多文件下载,当看到一个文件以后,可以双击该文件夹并查看文件夹里面的文件。
7)私聊界面
本界面主要用来显示两个人的对话信息以及发送信息。
发送的信息可以设置字体,大小,字体颜色。
也可以发送一个QQ表情。
8)群聊界面
本界面主要用来显示多人的对话信息以及发送信息。
右边显示的是群公告,可以用来公布一些必要的信息。
4.2数据输入输出设计
4.2.1数据输入
登陆界面数据的输入要求
Num