Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 04
创始人
2024-12-21 15:35:12
0

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

本章内容

  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;			//发送方ID 	QString strRecverID;			

相关内容

热门资讯

一分钟开挂!传送屋有没有挂,约... 一分钟开挂!传送屋有没有挂,约局吧辅助器下载,详细教程-2026最新版本1.约局吧辅助器下载 ai辅...
第六分钟了解!微信小程序微乐房... 第六分钟了解!微信小程序微乐房间怎么开挂(辅助挂)切实是真的挂,安装教程(了解有挂)-哔哩哔哩1、微...
7分钟插件!随意玩h5透视辅助... 7分钟插件!随意玩h5透视辅助,决战卡五星辅助,真是有挂(有挂教程)-哔哩哔哩一、随意玩h5透视辅助...
透视挂透视!竞技联盟破解版最新... 透视挂透视!竞技联盟破解版最新版,pokemomo辅助软件,指引教程(有挂教学)-哔哩哔哩1、起透看...
第8分钟开挂!yy比鸡辅助真的... 第8分钟开挂!yy比鸡辅助真的假的,牛总管辅助免费版,辅助教程-2026最新版本1、打开软件启动之后...
第九分钟详情!情怀游戏字牌辅助... 第九分钟详情!情怀游戏字牌辅助(辅助挂)原来有挂,解密教程(有挂猫腻)-哔哩哔哩1、金币登录送、破产...
第八分钟插件!新众乐辅助,情怀... 第八分钟插件!新众乐辅助,情怀娱乐辅助器,一直是有挂(新版有挂)-哔哩哔哩1、金币登录送、破产送、升...
透视神器!wepoker辅助透... 透视神器!wepoker辅助透视,hhpoker底牌透视脚本,模块教程(有挂分享)-哔哩哔哩1、hh...
第4分钟开挂!微信江苏小程序游... 第4分钟开挂!微信江苏小程序游戏破解器下载,科乐填大坑技巧,详细教程-2026最新版本亲,关键说明,...
第3分钟解密!衢州都莱辅助器开... 第3分钟解密!衢州都莱辅助器开挂(辅助挂)好像真的是有挂,力荐教程(有挂秘笈)-哔哩哔哩1、衢州都莱...