软件工程课程设计报告 之 详细设计报告

更新时间:2024-04-20 00:41:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

1

详细设计说明书

1、 引言:

1、1编写目的:

在前一阶段(概要设计说明书)中,已解决了实现该系统需求的程序模块设计问题。包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。在以下的详细设计报告中将对在本阶段中对系统所做的所有详细设计进行说明。 在本阶段中,确定应该如何具体地实现所要求的系统,从而在编码阶段可以把这个描述直接翻译成用具体的 程序语言书写的程序。主要的工作有:根据在《需求分析说明书》中所描述的数据、功能、运行、性能需求,并依照《概要设计说明书》所确定的处理流程、总体结构和模块外部设计,设计软件系统的结构设计、逐个模块的程序描述(包括各模块的功能、性能、输入、输出、算法、程序逻辑、接口等等) 在以下的各个阶段中,《用户操作手册》将与本阶段的工作紧密结合,努力作到 让用户易懂易学。《测试报告》和《维护报告》也将参考本说明书,检验本系统的各项性能指标,及时发现纰漏及时修补,一定要把功能强大、稳定可靠、便于维护的机票预定系统交到用户手中。

1、2项目背景:

在本即时聊天工具项目的前一阶段,也就是需求分析阶段,已经将系统用户对本系统的需求做了详细的阐述,这些用户需求已经在上一阶段中对不同用户所提出的不同功能,实现的各种效果做了调研工作,并在需求规格说明书中得到详尽得叙述及阐明。 本 飞Q即时聊天系统项目主要由两部分形成: 1、客户端; 2、数据库服务器端;

1

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

2

1、3文中特殊的定义和缩写:

1.3.1定义

SQL SERVER: 系统服务器所使用的数据库管理系统(DBMS)。 SQL: 一种用于访问查询数据库的语言

事务流:数据进入模块后可能有多种路径进行处理。 主键:数据库表中的关键域。值互不相同。

外部主键:数据库表中与其他表主键关联的域。 ROLLBACK: 数据库的错误恢复机制。

1.3.2 缩写

系统:若未特别指出,统指本机票预定系统。

SQL: Structured Query Language(结构化查询语言)。 ATM: Asynchronous Transfer Mode (异步传输模式)。

1、4参考资料:

1. 以下列出在概要设计过程中所使用到的有关资料: 2. 需求规格说明书 飞Q软件开发小组 3. 概要设计说明书 飞Q软件开发小组

4. 用户操作手册(初稿) 飞Q软件开发小组 5. 软件工程及其应用 周苏、王文等 天津科学技术出版社 6. 软件工程 张海藩 清华大学出版社 7. Computer Network A.S.Tanenbaun Prentice Hall

8.网络上的资料

文档所采用的标准是参照《软件工程导论》沈美明著 的“计算机软件开发文档编写指南”。

2

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

3

2.总体设计:

2、1需求概要:

应广大用户的要求,要求做一个性能更高更人性化的即使聊天工具,我飞Q软件设计小组努力为大家写一个更好的即时聊天工具。 飞Q2012聊天系统的总目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的飞Q2012聊天系统,实现添加好友,删除好友,相互聊天系统,为人们聊天提供准确、精细、迅速的信息。

根据可行性研究的结果和客户的要求,分析现有情况及问题,采用Client/Server结构,将飞Q2012聊天系统划分为两个子系统:客户端子系统,服务器端子系统。 要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客户机的界面要单明了,易于操作,服务器程序利于维护。

2、2 软件结构:

各模块之间的关系已由概要设计给出

下面介绍详细的设计

1 登陆模块

3

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

4

登录找回密码输入错误输入飞Q帐号和密码申请帐号输入格式是否正确正确进入找回密码界面点击登录进入申请界面密码正确?密码正确进入飞Q聊天主界面密码错误登录失败结束

2 申请模块

4

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

开始输入基本信息N点击新用户注册信息是否完整Y显示已申请的QQ帐号,密码点击登录QQ进入QQ登陆界面结束

3 安全模块

5

5

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

6

开始点击安全概述点击修改密码点击常见欺骗点击修改密保常见欺诈立即完成是否设置密保Y判断安全状况隐患危险N密保是否正确Y提交输入验证密保设置密保N密保问题是否正确提交Y提交N是否设置密保Y输入原密保问题输入密保问题N修改密码修改密保输入新密保提交良好结束

6

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

7

4 聊天模块

聊天窗口1聊天窗口2窗口1窗口2发送发送窗口2信息转换站窗口1信息转换站

服务器端: 1、申请模块

7

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

8

启动线程将可申请帐号预读到内存中等待用户申请。。。返回继续监听客户端返回申请到的QQ用户请求启动线程调用子线程次数过多此ip是否申请次数过多取出一个可申请的qq返回申请到的QQ在数据库中建立此人的基本信息档案结束c

2、登录模块

8

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

9

启动线程将密码预读到内存中等待用户申请。。。返回继续监听该帐号另一客户端客户端返回申请到的QQ用户请求启动线程调用子线程重复则发送终止命令判断是否是重复登录不重复密码错误判断密码是否正确给其他好友发送登录信息、读取系统消息读取系统消息所以在线好友返回申请到的QQ返回用户的好友列表读取好友列表数据库结束

3、添加好友模块

9

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

启动接收添加好友同意与否信息线程10

等待用户。。。返回继续监听客户端发送同意与否信息启动子线程调用子线程读取同意与否信息不同意同意否?同意写入数据库数据库客户端同意信息子线程结束 10

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

启动接收添加好友请求线程11

等待用户申请。。。返回继续监听客户端用户请求启动子线程调用子线程不允许任何人加入判断要添加的用户的添加权限允许任何人加入数据库需要验证结束 11

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

启动接收添加好友验证线程12

等待用户申请。。。返回继续监听客户端用户请求启动子线程调用子线程读取验证信息判断要添加的用户是否在线发送同意与否不在线数据库在线子线程结束要添加的用户同意的同时数据库相应添加

4、删除好友模块

12

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

启动删除好友请求线程13

等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程删除成功读取要删除的人在双方数据库中删除对方数据库发送刷新界面命令另一客户端结束

5修改好友昵称模块

13

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

14

启动修改好友昵称请求线程等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程读取要修改的人在数据库中修改数据数据库结束

6、查找用户模块

14

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

启动查找用户请求线程15

等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程读取要删除的人判断是精确查找还是按条件按条件精确构造SQL语句构造SQL语句返回结果列表数据库构造搜索结果列表返回结果结束

7、安全模块

7.1、设置密保模块

15

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

21

启动监听用户请求线程等待用户请求。。。返回继续监听客户端用户请求没有设置密保启动子线程调用子线程读取密保问题判断是否设置密保旧密码不正确判断旧密码是否正确返回重设成功信息数据库重设密码写入数据库子线程结束

8、移动好友模块

21

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

22

启动移动好友昵称请求线程等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程读取基本信息在数据库中修改数据数据库结束

9、组操作模块

22

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

启动组操作请求线程23

等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程读取基本信息判断是对组的什么操作赠加组删除组修改组的名称生成SQL语句在数据库中修改数据数据库结束

10、发送系统消息模块

23

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

24

开始服务器线程产生的不通的发送消息要求判断是发哪种类型的系统消息用户1用户3用户2用户4给相应的用户发送相应的系统消息。。。结束

11、更新个人信息模块

启动修改个人信息请求线程等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程读取信息生成SQL语句在数据库中修改数据数据库结束

24

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

25

12、请求ipPort 模块

启动修改个人信息请求线程等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程读取信息读取ip和port读取另一用户ip和portHashmap返回此人ip和chatport判断ipport是否为空返回不在线信息结束

13 、心跳模块

13.1、用户心跳接收处理模块

25

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

启动修改个人信息请求线程26

等待用户请求。。。返回继续监听客户端用户请求启动子线程调用子线程读取信息读取ip和port读取另一用户ip和portHashmap返回此人ip和chatport判断ipport是否为空返回不在线信息结束

13.2、服务器定时检测超时模块

26

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

27

启动循环检测用户是否在线的线程得到hashmap中的一个用户是否超时?是推拉检测模块否得到hashmap中的下一个用户

13.3、服务器推拉检测在线模块

27

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

28

启动循环检测用户是否在线的线程客户端是否在线我在线向用户询问是否在限定时间得到用户客户端响应是更新记录接收用户心跳时刻的hashmap否在数据库中相应修改从记录接收用户状态的hashmap删除此用户从记录接收用户在线信息的hashmap删除此用户从记录接收用户心跳时刻的hashmap删除此用户数据库此线程结束

14、添加可利用飞Q号

28

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

开始否读取数据库中可申请的帐号数Sleep 一小时判断数量是否过少否是添加一些可利用的帐号添加到内存中的可申请帐号arraylist中

3、程序描述:

客户端总模块:

29

29

山东科技大学 王昌帅 wangchangshuai0010.iteye.com 30

1 登陆模块

1 登录过程

对在飞Q登录信息界面中输入的各项信息进行初步检验。若发现错误,输入数据全部清空,以让用户重新输入一次。若未发现错误,转入主界面。其中的错误种类有:

输入数据不匹配

帐号 数据库没有该帐号 密码 与对应账号的密码不匹配 2 输入数据不能为空 if (账号为空) {

请输入账号再登陆 }

else if (账号长度小于6或对于20) {

请输入正确的账号,账号可以位数字或Email地址。 }

else if (密码为空) {

请输入密码后再登陆 } else {

通知服务器 账号为:xxx 密码为:xxx的请求登陆 }

2申请过程

对之前没有申请飞Q的用户,不能登录飞Q,而必须点击申请,成为飞Q大家庭点击之后转入申请界面

3 寻找忘记密码过程

对之前申请飞Q的用户,如果忘记密码,请不要担心,点击界面上的“忘记密码”,

点击之后转入寻找密码界面

30

1. 的一员。

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

31

2申请模块

对在飞Q申请信息界面中输入的各项信息进行账号申请。若发现错误,输入数据全部清空,以让用户重新输入一次。若未发现错误,转入账号申请成功界面。

if (昵称为空) { 请输入昵称 }

else if (密码格式错误(小于6或大于20)) { 密码必须6-20个字符! 密码框清空,重新输入 }

else if (两次密码输入不匹配) { 两次密码输入不一致 密码框清空,重新输入 } else {

获取注册信息

点击新用户注册,向服务器传输注册信息 }

31

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

32

3 增删改查模块

3.1 查找好友模块

对在飞Q查找好友界面中选择查找类型(精确查找或条件查找),输入各项查找信息进行好友查找。若发现错误,输入数据全部清空,以让用户重新输入一次。若未发现错误,转入查找结果界面。在查找结果界面中选择要添加的好友,双击,查看该好友的详细资料,点击添加,转入好友信息验证界面。在好友信息界面,输入验证信息,完成好友的添加。

Search类

if (查找联系人) { if (精确查找) { if (查询条件为空) { 请至少填一个查询条件 } else {

获取查找信息

点击查找把查找信息传递给服务器 } }

else if (条件查找) {

获取查找信息

点击查找把查找信息传递给服务器

} Search_rasult类 if(点击添加好友) { if(添加好友选择的是自己)

32

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

33

{ 对不起,自己不能加自己为好友! 重新选择 } else {

把选择的好友发送给服务器 } }

else if(关闭) { 放弃添加为好友 }

Addfriends类

if (确定添加为好友) { 把选择的好友信息发送给服务器 }

else if (取消) {

放弃添加为好友 }

3.2 删除好友模块

找到你要删除的对象所在的用户组,展开,找到该用户,右击,点击好友删除,然后刷新好友列表;

3.3.3 修改个人资料模块

点击自己头像,转入个人资料界面,更新你所需要的信息选项;确定更新点击确定,如果不想更新,点击取消即可;

更改头像:点击更换头像,即可转入更换头像界面,界面中陈列了各种头像,点击你想要的头像,即可显示该头像的不同样式,一供你参考。思考之后确实想更换,点击确定,立刻刷新所有界面,确保头像更换。如果不想更换,点击取消即可。

3.4 好友移动模块

33

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

34

找到你要移动的对象所在的用户组,展开,找到该用户,右击,点击移动,在弹出框中选择移动的组对象,向服务器发送相应的数据,然后刷新好友列表;

3.5 组操作模块 <1> 修改

找到你要修改的用户组,右击点击重命名,向服务器发送该账号的修改组信息,刷新好友列表,即可看见修改成果. <2> 删除

找到你要删除用户组,展开,右击,点击删除分组,向服务器发送该账号的删除组信息,然后刷新好友列表;

如果,要删除的是默认分组“我的好友”,系统不提供删除权限。 <3> 添加

在好友列表中右击,点击添加分组,输入分组名,点击确定,向服务器发送该账号的组信息,不想添加,点击取消。

4 安全模块

对在飞Q安全界面中,分为“安全概述”,“常见欺诈”,“修改密码”,“修改密保”; <1> 安全概述

安全概述 概述了你当前飞Q的安全状况 if (设置密保并且密码等级为良好以上) { 安全状况良好请继续保持良好的习惯 可立即完成设置密码 }

else if (设置密保并且密码等级为中等以下) { 安全状况存在隐患请定期修改密码 立即完成设置密码 } else {

安全状况危险请立刻设置密保问题 立即完成设置密保 }

<2> 常见欺诈

常见的集中欺诈方式:钓鱼网址,视频欺诈,中奖欺诈,冒充好友欺诈;

34

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

35

<3> 修改密码

修改密码之前请确保设置密保;

如果没有设置密保问题,请先设置密保问题,以确保该账户的安全性。如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密码。

if(三个密保问题有空) {

对不起,密保问题回答不能为空! 没填写的须不完整 } else {

向服务器获取对应密保问题的答案 If(回答错误) {

提示:对不起,密保问题回答不能正确 全部清空,重新输入 } else {

修改密码 输入旧密码

if (输入的旧密码正确) { if (新密码为空) { 提示:密码不能为空 } else if (两次密码输入不一致) { 提示:两次密码输入不一致 } else if (两次密码输入一致并且不空) {

向服务器发送该账号的新密码 } } else

35

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

36

{

提示:密码有误,请重新输入 } } }

<4> 修改密保

如果没有设置密保问题,设置密保问题。

如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密保。

if(没有设置密保) {

选择密保问题回答

If(选择的密保问题重复) {

提示:选择的密保问题重复 重新选择密保问题 }

Else if(修改密保时验证密保问题为空) {

提示:修改密保时验证密保问题为空 } Else {

服务器发送该账号的新密保问题和新密保问题对应的答案 } } else {

已经设置设置密保

向服务器获取对应密保问题的答案 输入密保问题答案(用户) If(回答错误) {

提示:对不起,密保问题回答不能正确 全部清空,重新输入 } else {

修改密保

选择密保问题回答

36

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

37

If(选择的密保问题重复) {

提示:选择的密保问题重复 重新选择密保问题 }

Else if(修改密保时验证密保问题为空) {

提示:修改密保时验证密保问题为空 } Else {

服务器发送该账号的新密保问题和新密保问题对应的答案 } } }

5 聊天模块

所有的聊天窗口的即时聊天信息 只要点击发送,聊天信息会发送到服务器中信息中转站中;在信息中转站中判断该发送的对象,再由服务器发送给对。

服务器模块:

1、申请模块

将用户发送过来的申请信息写入临时变量对象中并存入数据库中 在数据库中建立如下信息

在main数据库的各表中插入申请的号码

在users 数据库中建立该帐号的档案,包括好友列表、添加好友验证表、历史记录表等等

2、登录模块

接收数据并存入loginpot中

37

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

38

判断接收的密码和服务器中的密码是否相同,相同则返回登录成功,并发送一系列信息(见下),不相同则返回登录失败,

3、添加好友模块

1、发送添加好友请求:

用户发送添加好友请求包,服务器解析出要添加的好友,然后从数据库中

查找出该用户的添加好友权限jugde 然后进行一下判断: switch (judge) { case 1://假如统一任何人加入 在双方数据库中分别添加对方,并且向被添加的的用户发送的界面刷新命令

break; case 2: 对方需要验证信息,通知客户端

break; case 0: 对方不允许任何人加入,通知客户端

break; }

2、发送验证信息:

用户发送验证信息包,服务器解析出数据,判断要发送验证信息的用户是否在线

If(在线) { 在线的话,就把验证信息发送到该用户客户端上并显示 } Else {

不在线的话,就把验证信息存入要发送的用户的数据库中,等到该用

户下次登录时候并会提示该用户有添加好友验证信息 }

3、发送同意以否信息

38

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

39

用户发送同意与否信息包,服务器解析出数据,判断要发送同意与否信息

的用户是否在线,判断同意与否信息是否

If(同意) { 写入数据库相应 的信息。 } Else { 不对数据库进行操作。 }

If(在线) {

在线的话,就把同意与否信息发送到该用户客户端,同时把此人的

基本信息发送到客户端 } Else {

不在线的话,就把同意与否信息存入要发送的用户的数据库中,等到该用户下次登录时候并会提示该用户有添加好友成功与否信息 }

4、删除好友模块

删除好友模块设计思路比较简单,如下

用户发送删除好友信息包,服务器解析出基本数据,删除发送请求用户的数据库中要删除的好友的信息,同时在对方的数据库中也相应的删除此人信息,并且将删除成功与否信息发送回去,同时给要删除的用户发送刷新界面命令,当然得先判断该用户是否在线

If(在线) {

在线的话,给要删除的用户发送刷新界面命令,删除点发送请求的

用户的信息 } Else {

不在线的话,不用再进行任何操作 }

39

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

40

5修改好友昵称模块

同样,修改好友昵称模块,也很简单明了,不需要进行复杂的逻辑判断,详细过程如下:

用户发送修改好友昵称信息包,服务器解析成基本数据,在数据库中找到该好友的好友列表,修改该用户要修改的好友的昵称,然后子线程就可以终止了

6、查找用户模块

用户发送修改好友昵称信息包,服务器解析成基本数据,首先判断该用户用的是什么搜索模式,

If(搜索模式是精确查找模式) {

根据内容构造出SQL语句,在数据库中查找出相应的用户,构造出列

表发回客户端 }

Else if(搜索模式是按条件查找模式) {

根据内容构造出SQL语句,在数据库中查找出相应的用户,构造出列

表发回客户端 }

7.1、设置密保模块

用户发送修改好友昵称信息包,服务器解析成基本数据,在数据库中找到该用户的的信息,将密保问题和答案写入该用户的数据库中,假如已有密保问题则转到重设密保模块

7.2、判断是否设置密保模块

用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,

If(设置了密保) { 返回密保问题

40

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

41

Else if(没有设置密保) { 发送回去没有设置密保的标识 }

7.3、判断密保答案是否正确模块

用户发送给服务器密保答案信息,服务器解析出相应的数据,从数据库中查找该用户的信息,得到密保问题和答案,进行判断三个问题是否全部回答对

If(三个密保问题全回答对) { 向该用户客户端发送验证成功的消息 }

Else(三个问题不全对或全不对) { 向该用户客户端发送验证失败信息 }

7.4、修改密保模块

这里说明一下,修改密保的模块是在验证密保答案正确的前提下才能进入的,所以此模块仅仅是覆盖掉该用户的,特此声明,呵呵,声明有点晚了。。

没有复杂逻辑判断,思路如下:

用户发送给服务器新密保信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密保问题和答案,然后子线程接收。

7.5、修改密码模块

声明如7.4所示,不再重复 思路如下:

用户发送给服务器新密码信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密码,同时将新设置的密码加入内存中用户密码hashmap中,然后子线程接收。

7.6、找回密码

41

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

42

找回密码其实和重设密保有什么相识的地方,都是先验证信息密保信息是否正确,然后根据正确与否做出相应的处理

用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,

If(设置了密保) { 返回密保问题 。。。 判断接受的密保答案是否正确 If(三个问题都回答正确) { 返回验证成功信息,通知客户端转入重设密码模块

}

Else { 返回验证失败信息

}

Else if(没有设置密保) { 发送回去没有设置密保的标识,通知该用户由于没有设置密码,通过此方法不能找回密码。

8、移动好友模块

移动好友模块设计思路比较简单,如下

用户发送移动好友信息包,服务器解析出基本数据,在数据库中查到该用户的用户列表信息,更新列表信息,在数据库中做相应的修改

9、组操作模块

由于基本的几个组操作有很多相似之处,所以将几个组操作划为一个模块,设计思路如下:

42

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

43

用户发送组操作 信息包,服务器解析出基本数据和命令,判断要进行的组操作是什么操作,然后进行相应的操作,具体设计思路如下:

If(组操作命令为增加组) {

在users数据库中找到此用户的groupsList表,在此表中添加相应

的组 }

Else if(组操作为删除组) {

1、在users数据库中找到此用户的friendsList表,把相应

组的 好友的组属性改为 我的好友 ,即将要删除组中的好友放到我的好友 中,而不是直接将他们删除,

2、在users数据库中找到此用户的groupsList表,在此表中

删 除相应的组

}

Else if(组操作为修改组的名称) { 1、在users数据库中找到此用户的friendsList表,把相应组的 好友的组属性改为 要修改的组名

2、在users数据库中找到此用户的groupsList表,在此表中

删 找到相应的组,修改此组的名称为要修改的名称

}

10、发送系统消息模块 发送系统消息模块是由服务器直接调用的,来完成一些必须的用户响

应,此模块发送消息的不同是由器构造函数决定的,其构造函数共有7种,如下: //

public sendSystemMessageThread(String qq, int status) throws SQLException { 1、发送改变状态 } public sendSystemMessageThread(String text) throws SQLException {

43

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

44

2、发送系统消息(全部人) } public sendSystemMessageThread(String qq, int sign, String ip_od, String t) throws SQLException { 3、发送上次登录信息(登陆者) } public sendSystemMessageThread(String qq, String text) throws SQLException { 4、发送系统消息(对登录者) } public sendSystemMessageThread(String qq, systemMessage sys) throws SQLException { 5、发送添加好友请求信息 } public sendSystemMessageThread(int sign, String qq) throws SQLException { 6、当在其他地方登录时给另一个QQ发送下线通知 } public sendSystemMessageThread(String qq, systemMessage sys, int agree) { 7、给该用户发送好友状态改变

}

由服务器根据不同的需要构造不同 的发送系统消息线程,实现相应的响应

11、更新个人信息模块

用户发送给服务器新个人信息信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写已经更改了的此人的信息

44

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

45

12、请求ipPort 模块

此模块是服务器中唯一和聊天相关的监听线程,此种设计方法极大的降低了服务器的压力,获取ip 和聊天port 是聊天中很重要的一个环节,设计思路如下:

用户发送给服务器请求另一个人的port的信息包,服务器解析出相应的数据,从内存中查找另一个用户的ip 和聊天 port ,判断是否得到此人信息

If(查询到此人的在线信息) { 给客户端返回找到的在线信息 } Else { 给客户端返回没有找到此人信息,也就是此人不在线,客户端 然后做出相应地相应

}

13、心跳模块

心跳相互协作的工作组及即时聊天领域发挥着详单重要的角色,通过发送心跳报,来判断各个部分工作是否正常,以防某个部分运作异常发现不了,造成严重错误。 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。

用来判断对方(设备,进程或其它网元)是否正常运行,采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经离线。用于检测TCP的异常断开。基本原因是服务器端不能有效的判断客户端是否在线,也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。

比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方:可以是客户也可以是服务端,看哪边实现方便合理,一般是客户端。服务器也可以定时发心跳下去。一般来说,出于效率的考虑,是由客户端主动向服务器端发包,而不是服务器向客户端发。客户端每隔一段时间发一个包,使用TCP的,用send发,使用UDP的,用sendto发,服务器收到后,就知道当前客户端还处于“活着”的状态,否则,如果隔一定时间未收到这样的包,则服务器认为客户端已经断开,进行相应的客户端断开逻辑处理。

45

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

46

13.1、用户心跳接收处理模块

客户端发送心跳包,服务器心跳接收模块解析出此用户的状态,判断此人的状态与上一次心跳的状态是否相同

If(状态相同) { 将系统此时的时间写入内存中此用户的hashmap节点 }

Else if(状态不同) { 将系统此时的时间写入内存中此用户的hashmap节点 If(是下线信息) { 删除此人的在线信息 } 给其好友发送状态改变信息 }

13.2、服务器定时检测超时模块

此模块用于定时检测用户心跳超时与否,设计详细如下:

While(true) { 从内存中的hashmap 中的第一个用户到最后一个用户,进行如下操作:

If(此用户心跳超时) { 超时意味着此用户极有可能已经掉线了,但是不确定,所以此时要调用推拉检测用户在线模块,来确认此人到底在不在线

} Else { 不执行操作 } 休眠5秒后,继续 }

46

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

47

13.3、服务器推拉检测在线模块

此模块是服务器中很特殊的模块,是主动联系客户端 的模块,在次模块中,服务器会主动询问客户端是否在线,形象的描述如下:

服务器问:******你在线吗? 客户端答:我在线。 或者客户端没反应

这里就要判断在规定的时间内客户端是否返回响应 If(在规定的时间能收到相应) { 证明此用户是活着的,将系统此时的时间写入内存中此用户的 hashmap节点

} Else { 此用户已经意外掉线,所以应删除此人的所有在线信息 }

14、添加可利用飞Q号

添加可利用的帐号就是,假如可申请的号码低于规定的个数时,服务器添加帐号现在立即自动添加适当的帐号,保持适当数量的可利用的帐号,描述如下

While(ture ) { If(数据库中的可申请的帐号数量小于某个值) { 向数据库中添加适当数量的帐号,同时向内存中的可申请帐号 hashmap表中添加这些帐号

} Else { 不执行操作 } 线程休眠1小时 }

47

山东科技大学 王昌帅 wangchangshuai0010.iteye.com

48

48

本文来源:https://www.bwwdw.com/article/7kvp.html

Top