盈彩体育注册(中国)有限公司
盈彩体育注册(中国)有限公司 您所在的位置:网站首页 盈彩体育注册(中国)有限公司 基于C++的IM即时通讯系统之登录(二)

基于C++的IM即时通讯系统之登录(二)

2024-04-01 15:42:51| 来源: 网络整理

服务器目前只做接收客户端信息,然后反馈结果至客户端。遂使用单线程,后期会进行优化。

服务器要连接云服务器的内网,这样其他应用才可以通过公网来找到该服务器。所以客户端、服务器端连接数据库均使用外网地址。

网络层使用epoll。

客户端与服务器传送消息声明为结构体,并定义错误码。

每次接收消息,先解析消息头,然后再读取消息体,最后封装成包,传给login_server解析数据。

gate_server接收消息主要代码:

bool CGateServer::RecvUserInfo(int uClientFd){int message_id = c2s_message_begin;ssize_t size = recv(uClientFd, (void*)&message_id, sizeof(message_id), 0);int head_size = sizeof(message_id);int body_size = 0;char *pPackage = nullptr;switch (message_id){case c2s_login:body_size = sizeof(C2S_LOGIN);pPackage = (char*)malloc(sizeof(message_id) + body_size);if (!_GetPackage(uClientFd, body_size, message_id, pPackage)){return false;}if (!g_LoginServer.RecvLoginInfo(uClientFd, pPackage)){return false;}break;default:break;}}bool CGateServer::_GetPackage(int uClientFd, int ubody_size, int uhead, char* pPackage){void *p = malloc(ubody_size);ssize_t size = recv(uClientFd, p, ubody_size, 0);if (-1 == size ||== size){return false;}memcpy(pPackage, (void*)&uhead, sizeof(uhead));memcpy(pPackage + sizeof(uhead), p, ubody_size);return true;}

login_server处理信息主要代码:

bool CLoginServer::RecvLoginInfo(int uClientFd, char* pPackage){C2S_LOGIN _login_info = *(C2S_LOGIN*)pPackage;std::string _user_name = _login_info._username;std::string _password = _login_info._password;int result_code = error_code_begin;int user_id = 0;// 查询数据库std::string sqlstr = "select * from user where Nickname = "" + _user_name + "";";std::cout


【本文地址】 转载请注明 

最新文章

推荐文章

CopyRight 2018-2019 盈彩体育注册(中国)有限公司 版权所有 豫ICP备16040606号-1