基于C++设计一个 P2P 聊天软件

♻️ 资源

大小: 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 |

相关推荐
三川6982 小时前
深入浅出SSD 11:SSD测试
网络
ljj2535575051__2 小时前
LVS(Linux virual server)
服务器·网络·lvs
映翰通朱工2 小时前
从0到1:EC942边缘计算机用Python实现Modbus TCP采集+MQTT上云全记录(附踩坑实录)
网络·python·网络协议·tcp/ip·二次开发·映翰通
发量惊人的中年网工4 小时前
自建清洗中心VS托管安全服务:2026年企业DDoS防护ROI深度测算
网络·ddos
Yang961112 小时前
光缆故障快速排查实操技巧,鼎讯信通 Smart-S3 OTDR 一线使用心得
网络
LDZKKJ13 小时前
OpenAI模型“越狱“入侵Hugging Face——AI安全史上的至暗时刻
网络·人工智能·安全
xqqxqxxq15 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
泡沫冰@16 小时前
上章节中文件的讲解
前端·网络·nginx
海域云-罗鹏18 小时前
分支访问总部ERP卡顿?如何部署SD-WAN组网解决方案
服务器·网络·安全