基于java的仿qq聊天程序的设计与实现.docx
- 文档编号:10670137
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:40
- 大小:1.94MB
基于java的仿qq聊天程序的设计与实现.docx
《基于java的仿qq聊天程序的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于java的仿qq聊天程序的设计与实现.docx(40页珍藏版)》请在冰点文库上搜索。
基于java的仿qq聊天程序的设计与实现
内容摘要:
计算机网络的迅速发展,对人类社会诸多领域产生了巨大的影响。
尤其是,随着信息时代的来临,人们之间愈来愈趋向于通过网络来交流和传递信息。
而聊天系统正是当前人们使用最多的中介。
在这个平台上,许多认识或不认识的人们彼此间能够随意的相互交流。
因此,开发和架构这种平台符合时代发展的需要。
本系统在开发中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。
开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。
关键字:
Socket;服务器端;客户端;连接(connection)
Abstract:
Therapiddevelopmentofthecomputernetworkshasbeenmakingagreatinfluenceinmanyfieldsofhumansociety.Inparticular,alongwithinformationageapproaching,betweenthepeopletendtoincreasinglyinexchangesandthetransmissioninformationthroughthenetwork.Butchatsthesystemispreciselythecurrentpeopleusesmanyintermediary,。
Inthisplatform,peopleeachotherwhichmanyunderstandingordidnotknowcanatwillmutualexchange.Therefore,thedevelopmentandoverheadconstructionthiskindofplatformconformstothetimeneedtodevelop.
ThissystemwiththeLANcorrespondencemechanismprinciple,throughinherittingtheThreadkindtoestablishthemultithreadingdirectly.Inthedevelopment,itusestheelementarytheoryknowledgewhichthecomputernetworkprogrammes.forexample,TCP/IPagreement,Client/Serverpattern,networkprogrammingdesignmethodandsoon.Inthenetworkprogramming,itrealizesreadingandtransmissionoftheinformation,thatis,informatonflowsrealizetheinformationexchange,introduceinformationflowanalysisforrealizingasystem,inwhichcontainessomebasicsoftwareengineeringmethods.
Keywords:
Socket;server;client;connection
1.引言
当今主流的聊天工具有QQ,ICQ,MSNMessenger,YahooMessenger等,国内最热门的当属QQ,腾讯QQ(OICQ)是由深圳市腾讯计算机系统公司开发的,基于Internet的即时寻呼软件。
您可以使用QQ和好友用户进行交流,信息即时发送,即时回复,收发及时、功能全面。
此外QQ还具有BP机网上寻呼、聊天室、传输文件、语音邮件、手机短讯服务等功能,QQ不仅仅是虚拟的网络寻呼机,更可与传统的无线寻呼网、GSM移动电话的短消息系统互联,目前QQ和全国多家寻呼台、移动通信公司有业务合作。
是国内不可多得的中文网络寻呼机。
QQ支持显示朋友在线信息、即时传送信息、即时交谈、即时发送文件和网址。
QQ可以在Win95/98/NT/2000操作系统下运行,是十分灵活的网络寻呼工具。
它会自动检查您是否已联网,如果您的电脑已连入Internet,可以搜索网友、显示在线网友,可以根据QQ号、昵称、姓名、email地址等关键词来查找,找到后可加入到通讯录中。
当您的通讯录中的网友在线时,QQ中朋友的头像就会显示在线,根据提示就可以发送信息,如果对方登记了寻呼机或开通了GSM手机短消息,即使离线了,您也可及时将信息传递给您的好友。
虽然以上这些软件是免费的,并且功能越来越强大。
但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。
为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。
本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。
2.系统分析
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-1系统用例图
2.2.4时序图
客户登陆、注册时的服务器端时序图
图2-2注册、登陆时的服务端的时序图
本图说明:
服务器接每次与一个客户连接以后,就会去创建一个监听线程。
通过线程来接收客户端发送的所有数据。
如果要查询数据库,监听线程会请求获得一个数据库连接.如果数据库连接已经获得,就把连接交给DBOperation对象,通过此对象可以返回给监听线程必要的结果。
最后监听线程会通过Socket将结果返回给客户端。
2.2.5活动图
1)用户登陆活动图
图2-3用户登陆活动图
本图说明:
首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。
如果不正确,返回一个提示信息。
如果登陆成功,就更新在线状态。
通知所有好友自己已经上线。
2)客户之间的通信活动图
图2-4客户通信活动图
本图说明:
短消息发送以后,服务器端对应的监听线程会接收到一个数据包。
此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者。
如果不在线,就写入数据库。
3)客户之间的文件传送活动图
本图说明:
客户端向服务器发送文件下载请求。
如果服务器端同意下载,就读取文件流并将数据流写入到客户端。
客户端读取到文件名之后,立刻创建一个新的文件并将读取的数据写入到文件中。
图2-5文件传送活动图
4)新增好友活动图
根据好友ID号查找好友,如果此ID存在,就将用户信息发送到客户端。
同时将好友关系写入到数据库。
图2-6新增好友活动图
5)删除好友活动图
此图说明:
客户向服务器发送删除好友请求。
服务器接收到删除好友请求以后,将好友关系从数据库中删除。
图2-7删除好友活动图
3.总体设计
3.1功能模块图
本系统主要由由两个子系统组成:
1)文件传输系统;2)聊天子系统。
文件传输系统的功能主要有:
1)共享文件;2)查看并下载文件。
聊天子系统的功能有:
1)注册;2)登陆;3)添加群;4)查找群5)私聊;6)群聊;7)查看好友资料;8)查找好友;9)添加好友;10)创建好友分组。
图3-1系统功能模块图
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-4系统各表之间的联系图
3.2.2表结构设计
表3-1客户信息表(qquser)
1
自动id号
Id
整数
2
用户账号
Account
整数
3
用户密码
Pwd
字符
4
用户昵称
Nickname
字符
5
用户签名
sign
字符
6
用户性别
Sex
字符
7
用户邮箱
字符
8
用户头像
Head
字符
表3-2Qq消息表(QQMessage)
1
自动ID
ID
整数
2
发信人
Account_from
整数
3
收信人
Account_to
整数
4
发送内容
Content
字符
表3-3用户分组表(qqpersongroup)
1
自动ID
ID
整数
2
拥有者Id
userid
整数
3
分组名称
name
字符
表3-4公共群表(qqpublic_group)
1
自动ID
ID
整数
2
创建人
userid
整数
3
群名称
name
整数
4
群的公共消息
sign
字符
表3-5用户与群的中间表(qquser_publicgroup)
1
自动ID
ID
整数
2
加入的群ID
groupid
整数
3
加入的用户的ID
userid
整数
表3-6用户与分组的中间表(QQuser_persongroup)
1
自动ID
ID
整数
2
加入的分组的id
groupid
整数
3
加入分组的用户的id
userid
整数
以上各表创建的代码如下:
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(
idnumberprimarykey,
useridnumberreferencesqquser(id),
namevarchar(100),
signvarchar(800));
4)创建消息表
createtableqqmessage(
idnumberprimarykey,
account_fromnumber,
account_tonumber,
contentvarchar(1000));
5)创建用户与群的中间表
createqquser_publicgroup(
idnumberprimarykey,
groupidnumberreferencesqqpublic_group(id),
useridreferencesqquser(id););
6)创建用户与分组的中间表
createqquser_persongroup(
idnumberprimarykey,
groupidnumberreferencesqqpublic_group(id),
useridreferencesqquser(id));
7)为用户表插入数据
insertintoqquservalues(1,1,'long','I'mlong','male','helongyang@','48.gif');
insertintoqquservalues(2,2,'a','aa','male','a@','48.gif');
insertintoqquservalues(3,3,'b','bb','male','a@','48.gif');
insertintoqquservalues(4,4,'c','cc','male','a@','48.gif');
insertintoqquservalues(5,5,'d','dd','male','a@','48.gif');
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类图
图3-2系统类图
Socket:
非自定义类,.Socket。
Thread:
非自定义类,java.util.Thread。
Client:
负责具体发送和接收数据。
FromServerListen:
监听服务器是否在发送数据。
MainFrame系统的主界面(包括用户列表等)。
QQUserInfo包括用户的好友分组信息和群信息。
QQUserClass包括用户的个人信息,如ID、用户名等。
4.详细设计及实现
4.1界面设计
1)登陆界面
本界面需要填写的有两个,一个是用户账号,另一个是用户密码。
在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过Jdbc方式读取数据库,然后与用户输入的信息比较,否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。
如果成功,便打开主程序窗口。
然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的friend表,得到好友的号码后,再在好友表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个Vector用以存储好友的信息。
图4-1登陆界面图
2)注册界面
本界面要填写的项目包括:
用户昵称,密码,邮件地址,个性签名。
需要选择的项目包括:
性别,头像。
本界面主要负责将用户的信息包装成一个QQUserClass对象。
注册按钮一旦被点击,就会试图创建一个与服务器端的连接。
连接创建成功就会将填写的信息发送到服务器端。
如果服务器写入数据库成功,就回返回一个账号。
使用这个账号,用户可以登陆到系统中。
图4-2注册界面图
3)主界面
主界面是系统的核心部分。
它可以列出所有好友和客户所有加入的群,也可以提供共享文件和文件下载功能。
如果用户服务双击好友分组或群,好友列表或群成员列表将会显示出来。
双击一个好友,可以与他进行私聊。
双击一个群成员,可以与群里的所有成员对话。
本界面还提供了以下右键菜单:
添加好友分组、查找好友并加为好友、查找群并加为群、创建群、移动好友到其它分组、查看好友资料、查看群资料。
图4-3系统主要界面图
4)个人资料界面
该界面主要显示某个用户信息,包括用户的账号,昵称,性别,个性签名,用户等级等。
本界面还提供了一个“加为好友”按钮,如果点击它,此人将会被加为用户的好友。
默认的是加到第一个好友列表,不过也可以移动其它好友分组。
图4-4查看好友资料图
5)文件传输服务器端界面
该界面使用的步骤为:
第一步:
设置好服务器的IP,端口。
IP一定要是本机的IP,如果是单机测试,IP可以填写“127.0.0.1”。
端口号尽量不要小于2000,小于两千的端口可能被系统占用。
设置完后点击“确定”按钮。
第二步:
添加共享文件。
单击“添加文件共享”按钮,将需要共享的文件或文件夹添加到共享列表中。
第三步:
点击“启动文件发送服务”。
第四步:
如果共享文件完毕,需要点击“退出”。
图4-5文件传送服务器
6)文件传输客户端界面
使用文件传输的客户端要正确配置好服务器的IP和端口号,以及下载好的文件的存放目录。
如果其中之一配置不好,文件下载将会失败。
设置好以后,点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件。
目前不能支持文件夹下载和多文件下载,当看到一个文件以后,可以双击该文件夹并查看文件夹里面的文件。
图4-6文件传送客户端
7)私聊界面
本界面主要用来显示两个人的对话信息以及发送信息。
发送的信息可以设置字体,大小,字体颜色。
也可以发送一个QQ表情。
图4-7私聊界面图
8)群聊界面
本界面主要用来显示多人的对话信息以及发送信息。
发送的信息可以设置字体,大小,字体颜色。
也可以发送一个QQ表情。
右边显示的是群公告,可以用来公布一些必要的信息。
图4-8群聊天界面
4.2数据输入输出设计
4.2.1数据输入
4.2.1.1登陆界面数据的输入要求
Number(账号)输入的必须是整型,它是一个用户登陆的账号。
Password(密码)可以是你设置好的字符串,字符串内容可以随便。
如果用户设置不正确,将会导致登陆不成功,系统会弹出相应的对话框。
4.2.1.2注册界面的输入
Nickname(昵称),password(密码),sign(个性签名)可以是任意的字符串。
Email必须是Email地址格式,也就是中间必须含有“@”,否则提示输入不正确。
4.2.1.3共享界面的输入
服务器IP:
填入本机的IP地址,格式如:
172.168.1.253
端口号:
随便一个可以未被占用的端口都行(最好是2000以上)。
4.2.2数据输出
用户注册的信息必须写入数据库中。
下载的文件存放到的指定的目录中,如果未指定就存放到默认路径中,当默认路径不存在的时候给提示用户路径不存在。
4.3代码实现
4.3.1服务器端设计
4.3.1.1连接池的设计
连接池,就是生产一定数量的数据库连接存储在一个容器中,等待程序来索取,当这个容器器中的数据库连接全部被使用完的时候,就立即再产生指定数量的数据库连接。
这样
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java qq 聊天 程序 设计 实现