(六)实现好友管理:教你如何在即时通信系统中添加好友
文章目录
- 一、引言
- 1.1 即时通信系统中用户增加好友功能的重要性和应用场景
- 1.2 TCP连接传输用户增加好友请求的基本原理
- 二、实现用户增加好友功能
- 2.1 实现用户好友列表的展示和管理
- 2.1.1 使用QListWidgetItem控件展示好友列表
- 客户端关键代码展示
- 服务端关键代码展示
- 三、效果展示
- 四、经验和总结
- 4.1 经验和总结
- 4.2 遇到的问题和解决方案
- 4.3 进一步优化增加好友功能
- 五、总结
一、引言
1.1 即时通信系统中用户增加好友功能的重要性和应用场景
即时通信系统中的用户增加好友功能是一个重要的社交功能,它允许用户在通信系统中添加新的联系人或好友,从而扩大社交圈子并且增强社交互动。例如,用户可以通过添加好友来邀请他人一起参加活动,或者与其他用户分享自己的兴趣和经验。
1.2 TCP连接传输用户增加好友请求的基本原理
为了实现用户增加好友的功能,通信系统需要使用TCP连接传输用户增加好友请求。基本原理是将请求数据封装为TCP包,并发送到对应的服务端。服务端解析请求数据,然后执行添加好友的操作。一旦添加好友成功,服务端会发送响应数据给客户端,通知用户增加好友操作已经完成。
在本文中,我们将探讨如何实现用户增加好友的功能,并介绍如何使用TCP连接传输用户增加好友请求的基本原理。我们还将分享如何优化该功能,以提高系统的稳定性和可靠性。
二、实现用户增加好友功能
2.1 实现用户好友列表的展示和管理
2.1.1 使用QListWidgetItem控件展示好友列表
使用QListWidget控件展示好友列表是一种常见的实现方式。在该控件中,每个好友都可以表示为一个QListWidgetItem,通过QListWidgetItem可以方便地管理好友列表。我这个里面使用这两个方法。
添加好友:用户在搜索页面输入好友的账号和密码进行搜索,然后选择添加好友的操作。客户端向服务器发送添加好友的请求,服务器将请求转发给要添加的好友,好友接收到请求后可以选择接受或拒绝。如果好友接受了请求,则双方将成为好友,相应的好友信息将会被保存到数据库中,同时在客户端的好友列表中展示出来。
删除好友:用户在好友列表中选择要删除的好友,点击删除好友的操作后,客户端会弹出对话框,询问用户是否确认删除该好友。如果用户确认删除,则客户端向服务器发送删除好友的请求,服务器在收到请求后,将在数据库中将相应好友关系表的status字段修改为删除状态,同时在客户端的好友列表中将该好友从列表中移除。
客户端关键代码展示
void friendbuddylist::serachFriend()
{if(serachLineTextIsEmpty()){qDebug() <<"serach:" << ui->lineEdit->text();QJsonObject jsonRequest;jsonRequest["Type"] = "add_Friend_Request_List";jsonRequest["keyWord"]=ui->lineEdit->text();jsonRequest["userId"]="123456";// 将 JSON 对象转换为 JSON 文档QJsonDocument jsonDoc(jsonRequest);QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);if(tcpSocket!=NULL){tcpSocket->write(jsonData);}else{qDebug()<<"tcpsocket为空";}}
}
服务端关键代码展示
QSqlQuery query(db);query.prepare("INSERT INTO friendship_table (userId_Me, userId_Friend,friendStatus,addTime) VALUES (:userId_Me, :userId_Friend,:friendStatus,now())");query.bindValue(":userId_Me", userId);query.bindValue(":userId_Friend", friendId);query.bindValue(":friendStatus", friendStatus_Request);if (!query.exec()) {qDebug() << "Insert failed:" << query.lastError();}else{// 返回数据给客户端qDebug() <<"插入成功";QJsonObject jsonResponse;jsonResponse["result"] = "success";jsonResponse["message"] = "好友申请已发送";jsonResponse["status_code"] = friendStatus_Request;jsonResponse["userId"]=friendId;sendJsonResponse(tcpSocket,jsonResponse);}
三、效果展示

四、经验和总结
4.1 经验和总结
在实现用户增加好友功能时,我发现使用QListWidget控件能够很方便地展示好友列表,同时也可以实现添加、删除好友等操作。此外,在处理好友请求时,采用JSON数据格式能够很好地将请求信息进行打包,并通过TCP连接传输给服务器端或好友端。
另外,需要注意的是,增加好友功能实现时需要考虑到系统的稳定性和可靠性,例如对用户输入数据进行有效性验证、对TCP连接的状态进行监测和处理等。
4.2 遇到的问题和解决方案
在实现用户增加好友功能时,我遇到了一些问题,其中最常见的问题是TCP连接断开和数据传输错误。对于这些问题,我采取了以下解决方案:
TCP连接断开问题:使用QTcpSocket的disconnected()信号来监测TCP连接的状态,当连接断开时及时处理连接的重连或错误提示等。
数据传输错误问题:使用QTcpSocket的error()信号来监测数据传输的错误,例如数据格式不正确、数据丢失等,及时进行错误提示和处理。
4.3 进一步优化增加好友功能
为了进一步优化增加好友功能,提高系统的稳定性和可靠性,我认为可以采取以下措施:
对用户输入数据进行有效性验证,例如对账号、密码等进行格式限制和数据合法性验证。
加强TCP连接的状态监测和处理,及时处理连接断开、数据传输错误等问题,提高数据传输的稳定性和可靠性。
引入消息队列等机制,将好友请求等消息进行队列化处理,确保消息的可靠传输和及时处理。
采用数据加密等技术,对用户的个人信息和好友关系等数据进行保护,提高系统的安全性和保密性。
总之,通过对增加好友功能的不断优化和改进,我们可以提高即时通信系统的稳定性和可靠性,为用户提供更加优质的使用体验。
五、总结
在本文中,我们介绍了即时通信系统中用户增加好友功能的实现,包括用户好友列表的展示和管理,增加好友的请求和响应以及好友请求的处理和反馈。我们还分享了在实现过程中的经验和总结,以及遇到的问题和解决方案。最后,我们讨论了如何进一步优化增加好友功能,以提高系统的稳定性和可靠性。
随着即时通信系统的不断发展,用户增加好友功能也将不断完善和扩展。未来的发展方向包括更加智能化的好友推荐机制、更加便捷的好友添加方式、更加精准的好友匹配和推荐等。我们也将继续关注并推动即时通信系统中用户增加好友功能的发展,为用户提供更好的使用体验和服务。
我们欢迎读者留言和讨论,分享您的经验和看法,共同探讨即时通信系统中用户增加好友功能的发展和应用。
相关文章:
(六)实现好友管理:教你如何在即时通信系统中添加好友
文章目录 一、引言1.1 即时通信系统中用户增加好友功能的重要性和应用场景1.2 TCP连接传输用户增加好友请求的基本原理 二、实现用户增加好友功能2.1 实现用户好友列表的展示和管理2.1.1 使用QListWidgetItem控件展示好友列表客户端关键代码展示服务端关键代码展示 三、效果展示…...
使用循环数组和环形链表实现双端队列
本文主要介绍了两种实现双端队列的数据结构 —— 基于环形链表和循环数组。两种实现方式的基本原理和特点,以及详细的Java代码实现和分析。 引言 双端队列(Deque, Double-ended queue)是一种具有队列和栈的性质的数据结构。它允许在两端插入和删除元素,…...
谁想和我一起做低代码平台!一个可以提升技术,让简历装x的项目
序言 正如文章标题所述,最近一段时间低代码这个概念非常的火,但其实在不了解这个东西的时候觉得它真的很炫酷,从那时就萌生了做一个低代码平台的想法。 但随着时间的变化,现在市面上低代码各个业务方向的平台都有了,可…...
知识推理——CNN模型总结(一)
记录一下我看过的利用CNN实现知识推理的论文。 最后修改时间:2023.05.12 目录 1.ConvE 1.1.解决的问题 1.2.优势 1.3.贡献与创新点 1.4.方法 1.4.1 为什么用二维卷积,而不是一维卷积? 1.4.2.ConvE具体实现 1.4.3.1-N scoring 1.5.…...
OpengES中 GLSL优化要点
本文整理一些日常积累的可以优化的方向 一.延迟vector计算 在进行float与vector计算的时候,可以先确定float再计算,不要多个float一起计算 如: highp float f0,f1;highp vec4 v0,v1;v0 (v1 * f0) * f1;优化为 highp float f0,f1;highp vec…...
项目集角色定义
一、项目集经理的角色 项目集经理是由执行组织授权、领导团队实现项目集目标的人员。项目集经理对项目集的领导、 实施和绩效负责,并负责组建一支能够实现项目集目标和预期项目集效益的项目集团队。项目集经 理的角色与项目经理的角色不同。二者之间的差异是基于项…...
Unreal Engine11:触发器和计时器的使用
写在前面 主要是介绍一下触发器和计时器的使用; 一、在Actor中使用触发器 1. 新建一个C类 创建的C类也是放在Source文件夹中的Public和Private文件夹中;选择Actor作为继承的父类;头文件包括一个触发器和两个静态网格,它们共同…...
Qt之信号槽原理
Qt之信号槽原理 一.概述 所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这…...
【MySqL】 表的创建,查看,删除
目录 一.使用Cmd命令执行操作 1.使用( mysql -uroot -p)命令进入数据库 2.创建表之前先要使用数据库 3.创建表之前要先确定表的名称,列名,以及每一列的数据类型及属性 4.创建表 注意: 5.查看所有已创建的表 6.查看单表 …...
Python 字典修改对应的键值
将 key ‘1’ 的值 ‘1’, ‘3’, ‘5’ 字符,修改为 ‘2’, ‘4’, ‘5’ 。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单………...
【JFace】ComboViewer 设置了默认值,但没有效果
问题 在数据回显时,明明在代码中通过comboViewer.setSelection设置了默认值,但没有生效(回显),是怎么回事呢 ? 分析 如果comboViewer.setSelection(new StructuredSelection(items[1]))不起作用…...
基于Redis的Stream结构作为消息队列,实现异步秒杀下单
文章目录 1 认识消息队列2 基于List实现消息队列3 基于PubSub的消息队列4 基于Stream的消息队列5 基于Stream的消息队列-消费者组6 基于Redis的Stream结构作为消息队列,实现异步秒杀下单 1 认识消息队列 什么是消息队列:字面意思就是存放消息的队列。最…...
ePWM模块-时基模块(2)
ePWM模块(2) 时基模块的使用 TBPRD:周期寄存器 (设置的时钟周期存入此,可通过阴影寄存器缓冲后写入,也可通过活动寄存器立即写入) TBCTR:时基计数变值寄存器 (时基当前所计数的值存入,用于和所设定周期值比较) TBPHS:时基相位寄存器 TBSTS:时基状态寄存器 …...
让GPT对话写小说
## 来自你的消息: 写个小说 ## 来自ChatAI的消息: 很好,我可以为您编写一个小故事。以下是一个短小精干的故事: 《夜行者》 夜,是个寂静而神秘的时间,很多人都选择睡眠。但在这个城市,有一群人——夜行者,他…...
Docker 应用部署-MySQL
一、安装MySQL 1搜索mysql镜像 docker search mysql 2拉取mysql镜像 docker pull mysql:8.0.20 3创建容器 通过下面的命令,创建容器并设置端口映射、目录映射 #在用户名目录下创建mysql目录用于存储mysql数据信息 mkdir /home/mysql cd /home/mysql #创建docker容…...
电容笔哪个厂家的产品比较好?苹果平板的电容笔推荐
从目前来说,这个苹果的正版电容笔,售价真的是太贵了,一支就要接近上千元。事实上,对于那些没有很多预算的人来说,平替电容笔是一个很好的选择。一支苹果电容笔,价格是四支平替电容笔的四倍,但平…...
今年的面试难度有点大....
大家好,最近有不少小伙伴在后台留言,又得准备面试了,不知道从何下手! 不论是跳槽涨薪,还是学习提升!先给自己定一个小目标,然后再朝着目标去努力就完事儿了! 为了帮大家节约时间&a…...
【PWN · ret2libc】ret2libc2
ret2libc1的略微进阶——存在systemplt但是不存在“/bin/sh”怎么办? 目录 前言 python3 ELF 查看文件信息 strings 查看寻找"/bin/sh" IDA反汇编分析 思路及实现 老规矩,偏移量 offset EXP编写 总结 前言 经过ret2libc1的洗礼&a…...
深度学习01-tensorflow开发环境搭建
文章目录 简介运行硬件cuda和cuddntensorflow安装。tensorflow版本安装Anaconda创建python环境安装tensorflow-gpupycharm配置配置conda环境配置juypternotebook 安装cuda安装cudnn安装blas 云服务器运行云服务器选择pycharm配置代码自动同步远程interpreter 简介 TensorFlow是…...
linux相关操作
1 系统调用 通过strace直接看程序运行过程中的系统调用情况 其中每一行为一个systemcall ,调用write系统调用将内容最终输出。 无论什么编程语言都必须通过系统调用向内核发起请求。 sar查看进程分别在用户模式和内核模式下的运行时间占比情况, ALL显…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
