Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 04

上一篇实现了客户端与服务器的通信,这一篇继续实现相关功能

本章内容

  1. 服务器与数据库的连接
  2. 通信格式的规范
  3. 登录信息的验证



1.数据库的建立

这里连接的是Mysql8.0数据库,如果想要简单点可以直接用sqlite3数据库,调用逻辑基本差不多,数据库语法也基本一致。
在服务器工程里,添加Sql模块,

在这里插入图片描述

接着完善登陆数据库的代码

//登录数据库
bool OperateMysql::connectDatabase(QString strUserName, QString strPwd)
{m_db = QSqlDatabase::addDatabase("QMYSQL"); //, "connection1"m_db.setHostName("localhost");m_db.setPort(3306);m_db.setUserName(strUserName);m_db.setPassword(strPwd);return m_db.open();
}

接下来初始化相关库表,这里先创建一个用户信息表,其他表格后续慢慢补充添加

//初始化数据库
void OperateMysql::initDatabase()
{bool bRet;QString strSql = "create database mychat";	//如果存在不产生影响OperateMysql::getInstance()->operateSql(strSql);strSql = "use mychat";	//切换到对应库bRet = OperateMysql::getInstance()->operateSql(strSql);strSql = "create table if not exists users(ID varchar(255) primary key, ""nickname varchar(255) not null, ""password varchar(255)  not null)";bRet = OperateMysql::getInstance()->operateSql(strSql);
}//执行语句
bool OperateMysql::operateSql(QString strSql)
{QSqlQuery query(m_db);return query.exec(strSql);
}

关于这里的用户表,采用的类似QQ号的形式建立的表,“ID”代表的是账号,“nickname”是昵称(暂时用不到),"password"是密码

在命令行连接数据库,给数据库中提前录入一些账户用于测试和操作
在这里插入图片描述

2.通信格式的规范

需要注意的是,本项目为了更接近实际产品,客户端的所有通信都是通过服务器处理和转发,所以客户端并不直接连接数据库,而是将信息和数据发送到服务器,处理完再将结果返回客户端,为了后续数据传输的效率,现在就将客户端与服务器之间数据交互的格式制定,当然后续可以逐步改进和优化。
由于客户端和服务器两边用到的格式基本一致,因此我建立了一个路径,存放这些公用的文件和代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以下是目前定义的一些通信数据结构体,包括登陆、注册和聊天信息,本章主要用到的是登陆有关的数据和代码

//基础消息通信类型枚举
enum DataComType {ERR,				//错误或未识别类型LOGIN_CHECK,		//登录验证ACCOUNT_REGISTER,	//账户注册CHAT_MSG,			//聊天消息
};//基础消息通信结构体
typedef struct BaseDataComStruct {int iType = -1;		//1:登录验证  2:账户注册  3:聊天消息 DataComType dataComType = ERR;QString strData;//消息数据long long timestamp;	//时间戳DataComType transformCode(int iType) {switch (iType){case 1:return LOGIN_CHECK;case 2:return ACCOUNT_REGISTER;case 3:return CHAT_MSG;default:return ERR;}};int transformCode(DataComType tp){switch (tp){case LOGIN_CHECK:return 1;case ACCOUNT_REGISTER:return 2;case CHAT_MSG:return 3;default:return -1;}}}BaseDataComStruct;//登录信息结构体
typedef struct LoginDataStruct {QString strAccountName;			//账户名QString strPassword;					//密码QString strLoginIP;				//登录IP
};//聊天消息结构体
typedef struct ChatMsgDataStruct {QString strSenderID;			//发送方IDQString strRecverID;			/

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

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

相关文章

好用的接口文档swagger

本篇文章记录怎么给我们的后端项目整一个好用的接口文档 这个东西好像叫什么swagger吧 1. 依赖引入&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency>…

IP转接服务的重要性及其应用

在现今互联网高度发达的时代&#xff0c;IP转接服务的重要性日益凸显。对于家庭和企业而言&#xff0c;它不仅是连接互联网的桥梁&#xff0c;更是确保网络稳定、高效运行的关键。本文将深入探讨IP转接服务的核心意义及其在互联网世界中的应用。 IP转接服务&#xff0c;简而言之…

记录|C# winform布局学习

目录 前言一、自适应布局Step1. 添加AutoAdaptWindowsSize类Step2. Form中引用Step3. 创建SizeChanged事件函数Step4. 在Fram.Disiger中添加 更新时间 前言 参考视频&#xff1a; C#5分钟winform快速自适应布局 参考文章&#xff1a; 其他参考&#xff1a; 写这篇文章&#xff…

C#知识|账号管理系统-修改账号按钮功能的实现

哈喽,你好啊,我是雷工! 前边学习了通过选择条件查询账号的功能: 《提交查询按钮事件的编写》 本节继续学习练习C#,今天练习修改账号的功能实现。 以下为学习笔记。 01 实现功能 ①:从查询到的账号中,选择某一账号,然后点击【修改账号】按钮,将选中的信息获取显示到…

Java多线程-----线程安全问题(详解)

目录 &#x1f347;一.线程安全问题的引入&#xff1a; &#x1f352;二.线程安全问题产生的原因&#xff1a; &#x1f34c;三.如何解决线程安全问题&#xff1a; &#x1f389;1.synchronized关键字: &#x1f989;sychronized关键字的特性: ✨2.volatile关键字: &#…

橙芯创想:香橙派AIPRO解锁升腾LLM与Stable Diffusion的创意密码

文章目录 引言 一. 香橙派AI PRO配置以及展示优秀的扩展能力实物展示 二、Ascend-LLM模型部署开机xshell连接香橙派实战运行部署运行结果分析开发版表现 三、Stable Diffusion文生图性能表现 四、体验总结性能噪音便捷性 引言 在科技的浪潮中&#xff0c;一场融合智慧与创意的盛…

SpringBoot+Vue的图书销售网站(前后端分离)

技术栈 Java SpringBoot Maven MySQL mybatis Vue Shiro Element-UI 角色对应功能 网站用户 管理员 项目功能截图

C#中的线性表

什么是线性表 线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系,即:(1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数…

阿尔泰科技利用485模块搭建自动灌溉系统实现远程控制

自动灌溉系统又叫土壤墒情监控系统&#xff0c;土壤墒情监控系统主要实现固定站无人值守情况下的土壤墒情数据的自动采集和无线传输&#xff0c;数据在监控中心自动接收入库&#xff1b;可以实现24小时连续在线监控并将监控数据通过有线、无线等传输方式实时传输到监控中心生成…

Express+mysql单表分页条件查询

声明&#xff08;自己还没测试过&#xff0c;只提供大概逻辑&#xff0c;什么多表连接查询可以在原基础上添加&#xff09; class /*** param connection Express的mysql数据库链接对象* current 当前页* pageSize 一页显示行数* where [{key:id,operator:,value15}], key查询…

【HarmonyOS】HarmonyOS NEXT学习日记:四、布局与容器组件

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;四、布局与容器组件 学习了基础组件之后&#xff0c;想要利用基础组件组装成一个页面&#xff0c;自然就要开始学习布局相关的知识。我理解的ArkUI的布局分为两个部分 一、组件自身的通用属性&#xff0c;诸如weight、height、…

加密软件有什么用?五款电脑文件加密软件推荐

加密软件对于个人和企业来说至关重要&#xff0c;尤其是在2024年这样一个高度数字化的时代&#xff0c;数据安全变得尤为重要。 数据保护&#xff1a;加密软件可以保护敏感信息不被未经授权的人访问。这包括个人数据、财务记录、健康信息、企业机密等。 防泄漏&#xff1a;防…

HarmonyOS工程目录结构

应用级配置文件app.json5 应用唯一标识、版本号、应用图标、应用名称等信息 模块级配置文件module.json5 oh-package.json5 三方库的管理 其他配置 用于编译构建&#xff0c;包括构建配置文件、编译构建任务脚本、混淆规则文件、依赖的共享包信息等。 build-profile.json…

用Wireshark观察IPsec协议的通信过程

目录 一、配置本地安全策略 二、启动Wireshark&#xff0c;设置过滤器&#xff0c;开始捕获 1. 主模式 2. Quick mode 三、心得体会 1. 碰到的问题和解决办法 2. 心得 一、配置本地安全策略 配置好IPsec如下&#xff1a; 由于在windows server2008安装wireshark失败&…

Android IjkPlayer内核编译记(一)so库编译使用

转载请注明出处&#xff1a;https://blog.csdn.net/kong_gu_you_lan/article/details/140528831 本文出自 容华谢后的博客 0.写在前面 最近在搞RTMP协议直播拉流的功能&#xff0c;使用了B站开源的IjkPlayer作为播放器内核&#xff0c;在网络不好的情况下延迟会比较高&#xf…

网络安全防御【防火墙双机热备带宽管理综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路&#xff1a; 四、实验步骤&#xff1a; 1、FW3的网络相关配置&#xff1a; 2、FW1的新增配置&#xff1a; 3、交换机LSW6&#xff08;总公司&#xff09;的新增配置&#xff1a; 4、双机热备技术配置&#xff08;双机热…

甲骨文闲置ARM实例防回收的方法

前几日挖了个大坑&#xff0c;今天补一下&#xff0c;谈谈甲骨文闲置实例如何防止回收。 回收原则 2022年11月16日 Oracle添加声明&#xff1a; 从 2022 年 11 月 24 日开始&#xff0c;您闲置的 Always Free 计算实例可能会停止。巴拉巴拉&#xff0c;您还可以随时升级您的帐…

线程基础概念

1、线程概念: 线程是一个轻量级的进程 每一个线程都属于一个进程 进程是操作系统资源分配的最小单元 线程是CPU任务调度的最小单元 线程是一个任务执行的过程,包括创建、调度、消亡 创建: 线程空间位于进程空间内部 进程: …

“生日悖论”简析——公式计算、代码模拟

“生日悖论”共享生日概率&#xff0c;通项公式计算&#xff0c;代码模拟计算。 (笔记模板由python脚本于2024年07月17日 18:16:40创建&#xff0c;本篇笔记适合会基础编程的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&…

《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境

安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题&#xff08;可选&#xff09;5. 安装代码高亮插件 AsmDude&#xff08;可选&#xff09;6. 通义灵码&#xff08…