本篇文章由:原用户名(zg51747708),现在:骚里骚气  曾广 原创,未经允许不可以转载
(我建立的服务器已经不再运行了。源码仅供学习,如果想自己搭建服务器,请安装下面的数据库结构图,建立对应数据库,并且设置好链接字符串) 
我的SaoChat账号是51747708哦!添加好友必须对方也在线哦!不然就要提示!

大家可以来注册。服务器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                         //重命名好友备注

五,工程目录

MFC-SaoChat(模仿QQ)聊天软件相关推荐

  1. c++/MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊

    学习,c++有2个星期了.本来,本人是做php出身的.做php快2年了,最近身边多了很多高手.让自己对c开始感兴趣了,就开始学习c++了.首先接触的就是mfc.前几天,看到了一个博文,是有关,mfc网 ...

  2. 转载:仿QQ聊天软件2.0版

    仿QQ聊天软件2.0版 这是大神的地址:牟尼的专栏 http://blog.csdn.net/u012027907 详细的过程本人没看,但是看见他的实现效果,相当诱人!     上次课设做了Java版 ...

  3. linux qq多进程客户端,基于多进程QQ聊天软件设计.doc

    基于多进程QQ聊天软件设计 基于多进程的QQ聊天程序设计功能需求描述用户名登陆聊天,人与人之间交流是必不可少的.私聊,与特定的用户聊天群聊,向所有的用户发送消息,大家一起聊欢乐多 server端 输入 ...

  4. 网络编程-基于MFC的仿QQ聊天室-2020

    基于MFC的仿QQ聊天室(2020) 有幸学习过网络编程的一些知识,出于对编程的热爱,把曾经的一次简单实践编程作业进行了自定义的完成. 编程所需: 编程工具为VS 2010,需要掌握MFC的基本操作以 ...

  5. 仿QQ聊天软件(登录界面、好友界面、聊天界面)-Java(Swing、Socket)

    文章目录 一.项目结构 二.项目功能 三.制作界面 (一).登录界面的制作 (二).好友列表界面 (三).聊天界面 四.制作服务器 五.设计通信协议 六.项目缺点 学习了socket通信后,就想来制作 ...

  6. 仿QQ聊天软件(JavaFX+云端数据库)

    仿QQ聊天软件(JavaFX+云端数据库) 这个项目是这学期(大二上学期学完Java后的期末项目),寒假闲着无聊就整理下发上来供大家学习以及参考啦(因为国内关于JavaFX的各种资料感觉都太浅了,本来 ...

  7. 网络编程(三)---- MFC 仿QQ聊天软件

    今天来八一八,MFC的SOCKET 编程,利用CSocket实现一个基于TCP实现一个QQ聊天程序.你会发现,MFC要比WIN32 简单的多.但是如果你不理解具体API socket基础知识,你可能会 ...

  8. 初学java之模拟QQ聊天软件(简单实现)

    引言:这个程序是自从学习java以来写的第一个比较大的图形界面程序,花费了大约一周的时间,作为期末的课程设计,也算是基本上完成了任务,当然由于作者的编程能力有限,代码中难免存在BUG,不太简练,今天搬 ...

  9. java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)

    既然QQ能仿ICQ, 咱java也来个仿QQ. 在我刚学完java后,就想做点什么项目锻炼下自己的技能.凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了. 然后他想让我也 ...

  10. java仿QQ聊天软件OIM艰辛之路

    既然QQ能仿ICQ, 咱java也来个仿QQ. 在我刚学完java后,就想做点什么项目锻炼下自己的技能.凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了. 然后他想让我也 ...

最新文章

  1. php一个数组赋值给对象,php数组与对象相互转换方法
  2. lua入门1 helloworld
  3. fail2ban防止暴力破解
  4. Qt5标准文件对话框类
  5. VHDL | 音乐盒设计(代码类)
  6. python精要(73)-函数传递任意参数
  7. 中如何调取api_API(接口)是什么
  8. 将活动工作表生成 PDF,并通过电子邮件发送
  9. 对象 'dbo.xxx' 不存在,或对此操作无效。为表创建触发器,为什么提示对象不存在?
  10. mysql流程控制ifnull,MySQL IFNULL()控制流函数的用途是什么?
  11. 后端学习路线的书籍经验总结
  12. New Year Garland(dp+组合数学)
  13. 如何在 IDE 中将程序打成 jar 包 Library handing 三种方式讲解 如何编写 MANIFEST.MF
  14. 《CSDN排行榜冲榜攻略》妙用Emoji表情符号读者提升阅读体验(编码表)
  15. 各种滤镜算法C语言,Photoshop入门学习之PS 滤镜算法原理——染色玻璃
  16. [校内自测] Incr (LIS+智商)
  17. 单目标跟踪算法:Siamese RPN论文解读和代码解析
  18. 过年了,程序员同学如何给老板提加薪?
  19. 去AV片马赛克,开发者被抓了
  20. Android火热进行中

热门文章

  1. Monsters Battle Royale(gcd)
  2. 【BLE】蓝牙4.2核心协议
  3. 从零开始学建网站,枫树seo网给新手站长的九大建站忠告
  4. AttributeError: 'module' object has no attribute 'get_frontal_face_detector'
  5. 浅谈Echarts3.0
  6. Tomcat 中文文档(一)
  7. Error: Your CLT does not support macOS 11.0. 1.00
  8. 测试结果类型为: ESTJ
  9. 『题解』洛谷P3958 奶酪
  10. kube-scheduler