(六)实现好友管理:教你如何在即时通信系统中添加好友

news2024/9/23 12:14:11

文章目录

  • 一、引言
    • 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连接的状态监测和处理,及时处理连接断开、数据传输错误等问题,提高数据传输的稳定性和可靠性。

引入消息队列等机制,将好友请求等消息进行队列化处理,确保消息的可靠传输和及时处理。
采用数据加密等技术,对用户的个人信息和好友关系等数据进行保护,提高系统的安全性和保密性。

总之,通过对增加好友功能的不断优化和改进,我们可以提高即时通信系统的稳定性和可靠性,为用户提供更加优质的使用体验。

五、总结

在本文中,我们介绍了即时通信系统中用户增加好友功能的实现,包括用户好友列表的展示和管理,增加好友的请求和响应以及好友请求的处理和反馈。我们还分享了在实现过程中的经验和总结,以及遇到的问题和解决方案。最后,我们讨论了如何进一步优化增加好友功能,以提高系统的稳定性和可靠性。

随着即时通信系统的不断发展,用户增加好友功能也将不断完善和扩展。未来的发展方向包括更加智能化的好友推荐机制、更加便捷的好友添加方式、更加精准的好友匹配和推荐等。我们也将继续关注并推动即时通信系统中用户增加好友功能的发展,为用户提供更好的使用体验和服务。

我们欢迎读者留言和讨论,分享您的经验和看法,共同探讨即时通信系统中用户增加好友功能的发展和应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习笔记之梯度下降、反向传播与内置优化器

文章目录 1. 梯度下降法2. 反向传播算法3. PyTorch内置的优化器3.1 SGD优化器3.2 RMSprop优化器3.3 Adam优化器 1. 梯度下降法 笔者往期的机器学习笔记&#xff1a; 机器学习之梯度下降算法 梯度下降法是一种致力于找到函数极值点的算法。 所谓“训练”或“学习”就是改进…

2023年跨境电商必读:海外网红营销的4大雷区及应对策略

随着跨境电商的快速发展和海外网红的普及&#xff0c;海外网红营销已成为越来越多跨境电商企业推广品牌的必备手段。然而&#xff0c;在进行海外网红营销时&#xff0c;企业需要注意一系列雷区&#xff0c;以确保营销的有效性和可持续性。本文Nox聚星将和大家探讨2023年跨境电商…

AI自动写文章_免费在线原创文章生成器

自动写文章生成器 自动写文章生成器是一种利用人工智能和自然语言处理技术&#xff0c;帮助用户快速生成文章的工具。该软件可以根据用户的需求和选择&#xff0c;自动生成符合要求的文章&#xff0c;无需手动编写和修改。 自动写文章生成器的主要功能包括以下几个方面&#…

(三)打造华丽的即时通信系统主界面,让你的聊天体验更有质感

文章目录 一、引言1、即时通信系统的基本概念和应用场景2、Qt框架在实现即时通信系统中的应用 二、主界面设计2.1 界面设计的基本要求2.2 主界面的设计 三、通信功能实现3.1 通信协议的选择3.1.1 TCP协议和UDP协议的优缺点比较3.1.2选择何种协议进行即时通信系统的实现 3.2 通信…

单片机的电子秤方案设计

电子秤是一种利用电子技术实现重量计量的设备&#xff0c;广泛应用于商业、工业、医疗、科学研究等领域。电子秤是一种高精度的计重装置&#xff0c;不仅精度高&#xff0c;而且使用方便、稳定可靠。下面&#xff0c;我们从结构设计、工作原理、功能参数、产品种类四个方面来介…

MyBatis基础知识点总结

MyBatis了解 MyBatis 是什么&#xff1f; MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的XML或注解用于配置和原始映射&#xff0c;将接口和Java的 POJO&#x…

Canvas 2D详解

在我书的第六章中有一个关于MNIST手写数字的例子&#xff0c;当数据集加载完成之后&#xff0c;用户可以在<canvas/>上输入手写数字&#xff0c;点击「预测」按钮之后&#xff0c;浏览器会弹出经模型预测之后的结果&#xff1b;在我书的第九章和第十章中&#xff0c;分别…

2023年宜昌市中等职业学校技能大赛 “网络搭建与应用”竞赛题-2

2023年宜昌市中等职业学校技能大赛 “网络搭建与应用”竞赛题 一、竞赛内容分布 “网络搭建及应用”竞赛共分二个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;企业网络搭建部署项目&#xff0c;占总分的比例为50%&#xff1b; 第二部分&#xff1a;企业网络服…

第十四届蓝桥杯大赛软件赛省赛(Java 大学A组)

蓝桥杯 2023年省赛真题 Java 大学A组 试题 A: 特殊日期  试题 B: 与或异或 把填空挂上跟大伙对对答案&#xff0c;先把C/C B组的做了。 试题 A: 特殊日期 本题总分&#xff1a;5 分 【问题描述】 记一个日期为 y y \small yy yy 年 m m \small mm mm 月 d d \small dd dd 日…

链表的初步认识

什么是链表&#xff1f;链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 就如现实中的火车或铁链一般&#xff0c;环环相扣。当我们到达一个节点时&#xff0c;就可以通过这个节点找到下一个节点。链表与顺序表一样…

【服务器数据恢复】EXT4文件系统下KVM虚拟机数据恢复案例

服务器数据恢复环境&#xff1a; 服务器采用的Linux操作系统EXT4文件系统&#xff1b; 服务器中有3台KVM虚拟机&#xff1a;一台运行Mysql数据库&#xff0c;一台存放数据库备份&#xff0c;一台存放程序代码文件&#xff1b; 每台虚拟机包含一个qcow2格式的磁盘文件和一个raw格…

联合发版+主题演讲|GBASE南大通用亮相鲲鹏开发者峰会2023

5月6-7日&#xff0c;以“创未来 享非凡”为主题的鲲鹏开发者峰会2023在东莞松山湖举办&#xff0c;旨在打造生态伙伴和开发者学习、共享、交流的平台&#xff0c;帮助开发者深入了解鲲鹏、昇腾全栈技术&#xff0c;加速行业技术、产品和解决方案的创新。行业技术领袖、产业技术…

Apache FtpServer在Windows上使用以及SpringBoot中集成apache ftpserver实现Ftp 服务端搭建

场景 Apache Ftpserver Apache FtpServer是100&#xff05;纯Java FTP服务器。它被设计为基于当前可用的开放协议的完整且 可移植的FTP服务器引擎解决方案。FtpServer可以作为Windows服务或Unix / Linux守护程序独立运行&#xff0c; 也可以嵌入Java应用程序中。我们还提供…

【图】邻接表

目录 无向图的邻接表 链表&#xff08;存相邻顶点下标&#xff09;的类 数组里放的顶点 邻接表&#xff08;操作&#xff09; 构造和析构&#xff08;创建销毁邻接表&#xff09; 插入顶点 插入边 获取下标 插v1、v2之间的边 删除顶点 删除边 输出&#xff1a; 其他…

多种采购方式下,数智化招采系统解决方案(实例)

广发证券成立于1991年&#xff0c;是国内首批综合类证券公司&#xff0c;先后于2010年和2015年在深圳证券交易所及香港联合交易所主板上市。 多年来&#xff0c;广发证券在竞争激烈、复杂多变的行业环境中努力开拓、锐意进取&#xff0c;以卓越的经营业绩、持续完善的全面风险…

Node.js对ES6 及更高版本的支持

目录 1、简介 2、默认情况下什么特性随着 Node.js 一起发布&#xff1f; 3、有哪些特性在开发中&#xff1f; 4、移除这个标记&#xff08;--harmony&#xff09;吗 5、Node.js 对应 V8 引擎 1、简介 Node.js 是针对 V8 引擎构建的。通过与此引擎的最新版本保持同步&…

PMP课堂模拟题目及解析(第5期)

41. 项目的混凝土供应商通知项目经理&#xff0c;材料将比预定时间晚三个星期交付。项目经理更新了进度计划并通知项目团队。在这种情况下&#xff0c;哪种合同类型承担的风 险最小&#xff1f; A. 总价加激励费用合同。 B. 总价加经济价格调整合同。 C. 工料合同。 D. 固…

matlab学习笔记

一、序言 1. 图像的输入输出和显示 fimread("test.png"); frgb2gray(f);%rgb图像转化为灰度图像 imshow(f); imwrite(f,"result.jpg","quality",50);%50代表jpg形式压缩质量0-1002. matlab支持的四种图像类别 灰度级图像(Gray-scale images) …

类和对象【C++】【中篇】

目录 一、类的6个默认成员函数 1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值重载函数 二、赋值运算符重载 一、类的6个默认成员函数 注意&#xff1a;默认成员函数不能在类外面定义成全局函数。因为类里没有的话会自动生成&#xff0c;就会产生冲突。 1、构造函数…