一.数据库部分系统接入了数据库用于存储注册用户的信息。其中创建了Project_DB数据库和user_info表。二.ser.h代码1.mysql_client类class mysql_client { public: mysql_client() { db_ips 127.0.0.1; db_username root; db_dbname Project_DB; db_passwd 00000000; } ~mysql_client() { mysql_close(mysql_con); } bool mysql_ConnectServer(); bool mysql_Register(const string tel, const string passwd,const string name); private: MYSQL mysql_con; string db_ips; string db_username; string db_dbname; string db_passwd; };功能用于连接 MySQL 数据库并执行用户注册操作。成员变量变量类型说明mysql_conMYSQLMySQL 连接句柄db_ipsstring数据库服务器 IPdb_usernamestring数据库用户名db_dbnamestring数据库名称db_passwdstring数据库密码成员函数函数功能mysql_ConnectServer()连接 MySQL 数据库mysql_Register()执行用户注册2.socket_con类class socket_con { public: socket_con(int fd) : c(fd) { c_ev NULL; } void Set_ev(struct event *ev) { c_ev ev; } ~socket_con() { event_free(c_ev); close(c); } void Recv_data(); void Send_err(); void Send_ok(); void User_Register(); void User_Login(); private: int c; struct event *c_ev; Json::Value val; //mysql_client cli; };功能客户端连接处理类负责与单个客户端的通信处理数据收发和业务逻辑。成员变量变量类型说明cint客户端套接字描述符c_evstruct event*客户端事件对象valJson::Value存储接收/发送的 JSON 数据成员函数函数功能Recv_data()接收客户端数据并处理Send_err()发送错误响应Send_ok()发送成功响应User_Register()处理用户注册请求User_Login()处理用户登录请求新增Json::Value成员变量用于服务端接收存储客户端发送的json数据。其余类没有变化不过多赘述。三.ser.cpp类1.MySQL 数据库操作实现mysql_client::mysql_ConnectServer()bool mysql_client::mysql_ConnectServer() { MYSQL *mysql mysql_init(mysql_con); if (mysql NULL) { return false; } mysql mysql_real_connect(mysql, db_ips.c_str(), db_username.c_str(), db_passwd.c_str(), db_dbname.c_str(), 3306, NULL, 0); if (mysql NULL) { cout connect db server err endl; return false; } return true; }功能连接 MySQL 数据库服务器实现步骤步骤函数说明1mysql_init()初始化 MySQL 句柄2mysql_real_connect()连接到数据库参数说明db_ips.c_str()- 数据库服务器 IPdb_username.c_str()- 用户名db_passwd.c_str()- 密码db_dbname.c_str()- 数据库名3306- 端口号mysql_client::mysql_Register()bool mysql_client::mysql_Register(const string tel, const string passwd, const string name) { // insert into user_info values(0,13200000000,小王,123456,1); string sql string(insert into user_info values(0,) tel string(,) name string(,) passwd string(,1)); if (mysql_query(mysql_con, sql.c_str()) ! 0) { return false; } return true; }该函数相当于sql语句INSERT INTO user_info VALUES(0, 手机号, 用户名, 密码, 1);2.客户端连接处理实现socket_con::Send_err()和socket_con::Send_ok()void socket_con::Send_err() { Json::Value res_val; res_val[status] ERR; send(c, res_val.toStyledString().c_str(), strlen(res_val.toStyledString().c_str()), 0); } void socket_con::Send_ok() { Json::Value res_val; res_val[status] OK; send(c, res_val.toStyledString().c_str(), strlen(res_val.toStyledString().c_str()), 0); }功能向客户端发送错误或成功响应发送的 JSON{ status : ERR } { status : OK }void socket_con::User_Register()void socket_con::User_Register() { string tel, passwd, username; tel val[user_tel].asString(); passwd val[user_passwd].asString(); username val[user_name].asString(); if (tel.empty() || passwd.empty() || username.empty()) { Send_err(); } mysql_client cli; if (!cli.mysql_ConnectServer()) { Send_err(); return; } if (!cli.mysql_Register(tel, passwd, username)) { Send_err(); return; } Send_ok(); return; }该函数实现了服务器端处理用户注册的核心逻辑包括数据验证、数据库连接、用户信息插入和响应发送。1.提取用户信息从Recv_data()中已解析的JSON对象val中提取客户端发送的注册信息。2.验证数据完整性若任何字段为空向客户端发送错误响应。3.连接数据库创建mysql_client对象并连接 MySQL 数据库4. 执行注册操作将用户信息插入数据库如果插入失败如手机号已存在发送错误响应并返回。5.发送成功响应。socket_con::Recv_data()void socket_con::Recv_data() { char buff[256] {0}; int n recv(c, buff, 255, 0); if (n 0) { cout client close endl; delete this; return; } // 测试 cout recv: buff endl; Json::Reader Read; if (!Read.parse(buff, val)) { cout Recv_data:解析json失败 endl; Send_err(); return; } int ops val[type].asInt(); // DL 1, ZC,CKYY,YD,CKYD,QXYD,TC switch (ops) { case DL: User_Login(); break; case ZC: User_Register(); break; default: break; } // 解析 }1.接受客户端数据2.处理连接关闭3.打印接收到的JSON数据4.解析JSON数据Json::Reader Read; if (!Read.parse(buff, val)) { cout Recv_data:解析json失败 endl; Send_err(); return; }功能将接收到的数据解析为 JSON 对象处理逻辑使用Json::Reader解析 JSON 数据解析失败打印错误信息发送错误响应返回5. 根据操作类型分发处理int ops val[type].asInt(); // DL 1, ZC,CKYY,YD,CKYD,QXYD,TC switch (ops) { case DL: User_Login(); break; case ZC: User_Register(); break; default: break; }功能根据 JSON 中的type字段判断操作类型并调用相应的处理函数操作类型DL (1)登录ZC (2)注册其他功能暂未处理