大家可以来注册。服务器24小时运行。
账号可以是1-11位数,密码1到20位。 (账号除了0都是可以申请的哦!)0是内部用户。
客户端下载地址: http://pan.baidu.com/s/1hrHOIZ6 KEY : k5ba
发现BUG或者交流小伙伴可以私聊我的QQ哦!相互学习!共同进步!
客户端,服务器源码,已经工程说明下载地址:
http://pan.baidu.com/s/1eRA1qlc KEY :3zsc
概述
• 协议采用:UDP协议(应答机制,丢包重发)
• 同时在线人数:2000人以下
• 数据库:SQL server 2008
实现的功能:
1.账号注册
2.登陆
3.好友(添加,删除,如果一方删除另一方,将两方都失去对方好友)
4.分组管理好友(分组操作,添加删除,移动好友)
5.收到对方消息,将自动弹出聊天窗口。
服务器
一,服务器模型
服务器采用,多线程单用户处理。
二,编写环境
C++ MFC类库 VS2017
三,单元模块
• 单用户处理单元(能够一对一处理一个用户的所有请求)
• (主通信线程)线程管理单元(能接受新用户建立连接请求,经过验证账号密码后,建立起一个单用户处理单元(线程),与其进行交互)
单用户处理单元(类似服务员)
处理各种交互数据,处理客户端一切请求。
(主通信线程)线程管理单元(类似管理者)
负责处理,注册请求,登陆请求。登陆成功后,建立起对应的通信线程,并管理通信线程。
数据组成部分
• 数据库操作类 (CDataBaseUserIDInfo)(采用ado com接口操作数据库)
• 用户通信处理线程函数 (UserCommunication)
• 主通信线程函数 (MainCommunication)
• 用户类 (CUser)
四,服务器要求
本人测试时,服务器使用的系统是:
MicrosoftWindwos Server 2012 R2 Datacenter
数据库采用 SQLserver 2008 R2 版本
服务器配置:
CPU: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
RAM:2GB
磁盘空间: 40GB (包含操作系统)
五,服务器界面
六,备注
///服务器关闭
注意:在主线程的WM_CLOSE消息响应中。必须要等待所有线程都退出后方可执行。
{
设置全局的退出变量的值为TRUE。(这个变量在stdafx.cpp内)
并且检测所有线程的SOCKET状态,如果为阻塞,就关闭SOCKET使其检测退出变量。
在WM_CLOSE消息响应的函数中,一直检查用户类数组中所有成员对应的线程的运行状态直到全部退出为止。并提供强制退出按钮。
}
七,好友数据格式
// 好友数据数据发送格式
content:前sizeof(char)个字节(1)存储是否还有好友列表
content:接下来sizeof(char)个字节(1)存储是否这个分组还有好友
content:接下来(22)个字节存储好友列表分组名称(10个字符一个结束符)wchar_t
content:剩下的,每个(35字节)存储一个好友信息
(Remarker:一次最多传输27个好友
{每个好友的信息存储格式
(char[1])在线状态(char[12])好友ID (char 22)好友备注 {共35字节}
}
八,工程目录
九,数据库设计
两张表
user_friend_tables
user_info_tables
客户端
一,编写环境
二, C++ MFC类库 VS2017
二,组成部分
窗口组成
登陆窗口
注册窗口
用户界面
右键菜单
聊天界面
三,通信线程
l 请求线程
l 接收线程
请求线程负责各种请求(例如,添加好友请求,发送消息请求…)
接收线程负责接收(例如,接收消息,接收好友请求…)
四,通信协议
协议文件
Protocol.h
协议格式
typedefcharOneBty;
//----------------------------数据包格式
typedefstructSao_Protocol
{
OneBty action;
OneBty id[SAO_LENTH_ID + 1];
OneBty password[SAO_LENTH_PASSWORD+ 1];
OneBty content[SAO_LENTH_CONTENT+ 1];
}SAO_PROTOCOL, *SAO_PPROTOCOL;
协议格式:
账号#密码#行为#内容
数据包大小: (1023字节)
行为:0-256种 (1字节)
账号:1到11位的数字。 (11字节)
密码:6到20位字母数字符号组合。(20字节)
内容 (989字节)
行为列表:
//----------------------------ACTION
#defineSAO_PROTOCOL_FAIL -1 //操作失败(登陆时代表密码错误)
#defineSAO_PROTOCOL_SUCCESS 0 //操作成功(登陆时代表密码正确)
#defineSAO_PROTOCOL_LOGIN 1 //登陆
#defineSAO_PROTOCOL_REGIST 2 //注册
#defineSAO_PROTOCOL_SEND 3 //发送消息
#defineSAO_PROTOCOL_LOGOUT 4 //注销
#defineSAO_PROTOCOL_NO_USER 5 //用户不存在
#defineSAO_PROTOCOL_NEW_PROT 6 //新通信端口(服务器发送给客户端)
#defineSAO_PROTOCOL_REQUEST_FRIEND_LIST 7 //请求好友列表(服务器发送给客户端时,代表是好友列表数据)
#defineSAO_PROTOCOL_I_ONLINE 8 //表示我在线(用户发送给客户端)
#defineSAO_PROTOCOL_CHANGE_GROUP_NAME 9 //改变分组名称
#defineSAO_PROTOCOL_RECV 10 //接收消息
#defineSAO_PROTOCOL_REQUEST_FRIEND_LIST_F 11 //第一次请求好友列表
#defineSAO_PROTOCOL_ADD_GROUP 12 //添加分组
#defineSAO_PROTOCOL_DELETE_GROUP 13 //删除分组
#defineSAO_PROTOCOL_ADD_FRIEND 14 //添加好友
#defineSAO_PROTOCOL_DELETE_FRIEND 15 //删除好友
#defineSAO_PROTOCOL_RECV_ADD_FRIEND 16 //接收到添加好友请求
#defineSAO_PROTOCOL_USER_OFFLINE 17 //用户不在线
#defineSAO_PROTOCOL_ADD_FRIEND_REQUEST_OK 18 //成功发送添加好友请求
#defineSAO_PROTOCOL_AGREE_ADD 19 //同意添加好友
#defineSAO_PROTOCOL_ALREADY_FRIEND 20 //已经是好友
#defineSAO_PROTOCOL_MOVE_FRIEND 21 //移动好友
#defineSAO_PROTOCOL_RENAME_REMARKS 22 //重命名好友备注