欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 04

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

2024/10/24 10:15:11 来源:https://blog.csdn.net/Leo_csdn_/article/details/130393578  浏览:    关键词: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;			/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com