♻️ 资源
大小: 2.80MB
➡️ 资源下载: https://download.csdn.net/download/s1t16/87453207
聊天软件概要说明书
参考资料
《信息技术提高班培养计划 V5.1》
《软件工程------实践与理论》
《软件工程概论》
总体设计
功能要求
用户界面(GUI)可自行设计,主要为用户提供方便。
用户界面要及时的对用户的操作做出反应。
要实现一个用户可以和多个用户同时进行聊天。
实现平台 Linux 或 Windows,编程语言 C/C++,Java。
运行环境
服务器:CPU:1G;内存:4G;硬盘:15G
支持系统:Ubuntu16.0.4
基本设计概念和处理流程
部分一:P2P 聊天中各个成员管理。每个成员称为一个 peer,要有一个中心的服务处理 peer 的登记和对已经登记的 peer 进行更新。
**步骤 1:**一个 peer 选择一个名字,通过登记界面进行登记。

图 1 用户 1 登陆
步骤 2:服务器拥有一个公有 IP,在一个众所周知的端口进行监听。Peer 向服务器发送'register'请求,同时发送自己的登记信息(如自己取的名字,自己的监听端口号等)。服务器收到'register'请求后,如果这是第一个登记请求,服务器建立一个用于记录已经登记 peer 的列表(Peer List),否则更新 Peer List。

图 2 用户 1 登陆后分配一个 ip
步骤 3:服务器向来登记的 peer 发送 Peer List。PeerList 由一些活跃的 peer 组成,一个活跃的 peer 是在最近 30 秒内进行登记的 peer。
步骤 4:peer 收到 Peer List 后,以适当的形式显示出来。设计一个显示 Peer List 的 GUI。

图 3 当第二个节点登陆后跟新 peer list
步骤 5:每个已经登记的 peer 每隔 15 秒向服务器登记,来使自己保持活跃,同时得到最近新登记的 peer 信息。如果需要,就在自己的 Peer List GUI 进行更新。

图 4 第一个节点中 peer list 一起更新
部分二 :多个 peer 间相互发送消息
步骤 1:在客户端 P1 的用户 U1(123)在自己 Peer List GUI 中选择一个 peer,假设为 U2(321)。
步骤 2:P1 建立一个到 P2 的连接。

图 5 p1 连接到 p2
**步骤 3:**U1 在自己的发送信息界面(Messaging GUI)编写信息,然后点击发送按钮,P1 将信息通过步骤 2 中建立的连接发送到 P2。

图 6 p2 向 p1 发送消息

图 7 p1 接收到 p2 的消息
步骤 4:如果第 3 个用户 U3(222)发送一条消息到 U1@P1,如果 U1 此时正好有一个 Messaging GUI 与 U3 进行交互,那么就显示消息,如果没有,就要提示 U1 有新消息到来。

图 8 创建 p3 后尝试向正在与 p2 通信的 p1 发送消息

图 9 p1 接收到 p3 的消息
流程图

客户端流程图

服务器流程图
结构

- Web 层:即用户接口层,主要是接收用户的输入,并将处理后的结果显示给用户
- BLL 层:业务逻辑层,主要是系统业务逻辑的处理,并将处理结果返回给 Web 层。
- DAL 层:数据库访问层,主要负责对数据的访问和操作数据库的操作结果返回给 BLL 层
- DATA 层:数据层,作为各层之间数据传递的参数出现
接口设计
内部接口
内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。具体参数的结构将在下面数据结构设计的内容中说明。接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。
外部接口
在用户界面部分,根据需求分析的结果,用户需要一个用户友善界面。在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示重要以及出错信息。外观上也要做到合理化,考虑到用户多对 windows 风格较熟悉,应尽量向这一方向靠拢。
运行设计
运行模块组合
客户端:每个模块执行单一且相同的功能,模块内部完成高内聚和与其他客户端低耦合,使每个功能互不影响,都能独立与服务器产生连接。
服务器:接收客户端的连接请求,接收并转发消息并维护一张全局的 peer list。
运行控制
客户端:每个 peer 登陆之后系统自动分配一个 ip,用于与其他的 peer 连接,其只能够选择由服务器维护的 peer list 中的 peer 与其产生对话。
服务器:接收到一个 peer 节点的登陆消息之后,在 peer list 中为其创建一项记录,并为其提供所有的 peer list 中的节点以供其选择。
运行时间
本系统个运行模块将本着尽量少占用系统资源、尽快释放占资源的原则进行设计,使得系统运行时间在可以接受的范围内。
- 响应时间:20ms
- 更新处理时间:10ms
- 数据的转换和传送时间:5ms
- 系统数据显示时间:3ms
系统数据结构设计
|--------------|-----------|-----------------|
| 变量功能 | 变量名称 | 变量类型 |
| 用户昵称 | name_ | char |
| ip 和端口信息 | sockaddr_ | struct sockaddr |
| 记录上次登陆后经过的时间 | time_ | int |
| 是否在线 | isonline | bool |