软件功能

服务端软件

以后台进程运行,
既作为服务器接收客户端发来的请求,
对客户请求做出响应,并发回处理结果.
又作为MySQL服务器客户端,
使用MySQL服务器的数据存储和检索服务.作为服务端软件,支持的客户端请求有:
1.支持客户端注册请求.
先检查后台数据库user表中用户是否存在,
不存在时,允许注册,数据存储到MySQL服务器的表,
向客户返回处理结果.
2.支持客户端登录请求.
验证从客户发来的密码,用户名是否和后台数据库中某用户匹配,
向客户返回处理结果.
且服务器维护所有在线用户的记录.
3.支持客户端添加好友请求.
验证要添加的好友id是否在后台数据库user表中存在,
若存在,在以用户id命名的数据库的friends表中添加一项.
向客户返回处理结果.
4.支持客户端返回好友列表请求.
从客户id命名的数据库的friends表中检索出所有项,打包发回给客户.
5.支持客户端离线请求.
依据客户端id,清除服务器维护的在线用户信息中的该用户的项.
6.支持客户端t请求取得所有给其发了信息但信息尚未被自己接收的用户列表的请求.
每次客户a给客户b发消息时,
客户a把消息发给服务器,
服务器在数据库chatmessages中设置一个表a_b记录ab间的消息,
每个项包含消息内容,消息方向,时间戳,消息是否已被对方接收标志信息.
服务器同时在以b的id命名数据库的needtoproecssfriends中将a的id插入.
这样,  从以t的id命名的数据库的needtoprocessfriends中取出所有项,
打包发回给客户即可.
7.处理客户端聊天请求.
客户端聊天包含聊天内容,消息发送者a,消息接收者b.
服务器在数据库chatmessages中设置一个表a_b记录ab间的消息,
每个项包含消息内容,消息方向,时间戳,消息是否已被对方接收标志信息.
服务器同时在以b的id命名数据库的needtoproecssfriends中将a的id插入.
若b此时在线,
服务器给客户端b发一个 新消息到达通知消息.
通知客户端b有新消息到达.
8.处理客户端获取与某个指定对端需要但尚未被处理消息请求.
如客户端a请求获取与客户端b的未被处理消息,
服务器在chatmessage数据库的a_b表中检索出所有被对方接收标志为否的消息,
打包作为响应返回给a.
此外,
服务器将chatmessage数据库的a_b表中被取出项的接收标志修改为是.
从以a的id命名的数据库的needtoprocessfriends中删除b.

客户端软件

客户端软件的形态为普通的聊天软件客户端,有可视的UI界面

用户注册

- 注册成功
注册成功,注册信息被记录到后台数据库的数据表.

- 注册失败
注册的用户已经注册
后台MySQL服务器未开启
与聊天服务器的网络通知故障
上述情形会导致注册失败

用户登录

- 成功登录
输入的用户名和密码在后台数据库找到匹配时,可成功登录
登录后显示主UI界面
UI划分3块.
1.Friend List
好友列表,显示所有好友用户名
双击好友列表中一项,可以和指定好友进行一对一聊天
2.NeedToProcessUsers
待处理用户列表,
此列表显示给你发了信息,
但信息未被你接收显示的用户列表
3.聊天窗口
标题部分在一对一聊天时,显示a to b chat window
内容部分显示双方间聊天的历史记录
编辑部分,用于编辑要发给对方的聊天内容
发送按钮,将聊天请求进行发送

- 登录失败
在输入的用户名和密码在后台数据库中找不到匹配时,
在后台数据库未启动时,
在与聊天服务器网络连接故障时,
上述情形会导致登录失败.

添加好友

- 成功添加

- 添加失败
输入的用户id在后台数据库不存在,
后台数据库关闭,
与聊天服务器的连接故障,
上述情形会导致添加失败

好友间聊天

1.双击好友列表某个好友进入与其聊天窗口&编辑聊天信息

2.点击发送,发出聊天内容

新消息提醒

上面xu1给ben发了消息,发送时ben尚未登录.
现在ben登录,登录后所见如下needtoprocessusers中包含xu1,
表明xu1给ben发了信息,但信息未被ben收到.
这里有表现出本聊天软件好友添加机制的一个特点.
对a和b.
a可以将b添加为其好友.
添加后,a可向b发消息,b显示在a的好友列表.
对b,
收到a的消息且消息未被其接收时,
在b的needtoprocessuser表可见a.
但由于a不是b的好友,
a不在b的好友列表.b也无法打开与a的聊天窗口接收消息.
如b想接收a的消息,b可添加a为好友.
然后打开与a的聊天窗口,则将显示a发来的消息.

这里,ben为了接收xu1的消息,添加xu1为其好友

好友列表双击xu1,打开与xu1的聊天窗口,接收聊天消息

登录好友间的聊天


技术层面

代码模块及其功能

1. 网络通信模块
网络通信模块采用我进行注释&说明,结构调整后的mymuduo库.
关于mymuduo库具体说明参考
https://github.com/xubenhao/MyMuduo
在ChatMe应用中
mymuduo库放在MyMuduo文件件,
被客户端和服务器共同使用,来提供基于TCP/IP的局域网通信功能2.MySql数据库访问模块
采用mysql提供的c api进行与mysql服务器的交互.
提供一个c++类MySqlAgent来封装对mysql提供的c api的使用
通过该类在服务端我们作为一个mysql客户端,
使用后台mysql服务器提供的数据存储,数据检索,数据处理服务.3.应用层通信协议设计
客户端到服务器方向会发出的消息目前有8种类别,
每种类别及响应字节流打包/解包协议如下
a.注册
4字节长度+2字节消息类别
+1字节用户id长度+用户id内容+1字节密码长度+密码内容
b.登录
4字节长度+2字节消息类别
+1字节用户id长度+用户id内容+1字节密码长度+密码内容
c.添加好友
4字节长度+2字节消息类别
+1字节添加方用户id长度
+用户id内容+1字节被添加方用户id长度+用户id内容
d.获取好友列表
4字节长度+2字节消息类别
+1字节用户id长度+用户id内容
e.离线
4字节长度+2字节消息类别
+1字节用户id长度+用户id内容+8字节登录时间戳
f.获取需要处理用户列表
4字节长度+2字节消息类别+1字节用户id长度+用户id内容
g.聊天
4字节长度+2字节消息类别
+1字节发送方用户id长度+用户id内容
+1字节接收方用户id长度+用户id内容+聊天内容长度+聊天内容
h.获取客户间未被处理消息
4字节长度+2字节消息类别
+1字节发送方用户id长度+用户id内容
+1字节对端用户id长度+用户id内容服务器到客户端方向会发出的消息目前有8种类别,
每种类别及响应字节流打包/解包协议如下
a.注册回复
4字节长度+2字节消息类别+1字节注册结果
b.登录回复
4字节长度+2字节消息类别
+1字节登录结果+8字节登录时间戳
c.添加好友回复
4字节长度+2字节消息类别+1字节添加结果
d.获取好友列表回复
4字节长度+2字节消息类别
+1字节好友数量+1字节好友id长度
+id内容[如此重复好友数量次,以发回所有好友信息]
e.获取需要处理用户列表回复
4字节长度+2字节消息类别+1字节好友数量
+1字节好友id长度
+id内容[如此重复好友数量次,以发回所有用户信息]
f.聊天回复
4字节长度+2字节消息类别+1字节聊天处理结果
g.新消息通知
4字节长度+2字节消息类别+1字节发送方用户id长度+用户id内容
h.得到客户间未被处理消息回复
4字节长度+2字节消息类别
+2待处理消息数量+1字节消息方向
+2字节消息长度+消息内容+8字节消息时间戳
[如此重复待处理消息数量次,以发回所有未处理消息]

参考资料

1.Qt 5.9 C++开发指南
2.C++ Primer
3.Unix环境高级编程
4.Unix网络编程
5.Unix网络编程-进程间通信
6.MySQL技术内幕(第5版)
7.muduo网络库

局域网简易聊天服务器&客户端相关推荐

  1. python语言视频-Python语言之Python3 实现简易局域网视频聊天工具

    本文主要向大家介绍了Python语言之Python3 实现简易局域网视频聊天工具,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 操作系统为 Ubuntu 16.04,OpenCV ...

  2. Python3 实现简易局域网视频聊天工具

    Python3 实现简易局域网视频聊天工具 1.环境 操作系统为 Ubuntu 16.04 python 3.5 opencv-python 3.4.1.15 numpy 1.14.5 PyAudio ...

  3. 超详细:实现过程-Linux 环境下的简易聊天室,采用CS模型,实现多客户端之间的稳定数据传输。--注册和登录(但之后会连续更新内容,直至全部实现)

    前言 在学完不够全面的Linux操作系统编程后(这也意味着我后期也要不断学习,这也符合我活到老学到老的人生观点),需要以一些项目来检测自己的所学,毕竟实践见真章. 所以在今后的几天里,我将以无界面聊天 ...

  4. C#下如何实现服务器+客户端的聊天程序

    C#下如何实现服务器+客户端的聊天程序 最近也在接触SOCKET编程,在当今这样一个网络时代,很多技术都以网络为中心在诞生,至少我认为是这样的,而SOCKET套接字接口,在实现网络通讯上处于关键地位, ...

  5. 服务器收到消息加入数组,从聊天服务器发送到聊天客户端的数组更新

    我发现了一个聊天服务器的代码,我有一个简短的问题.这是关于以下摘录:从聊天服务器发送到聊天客户端的数组更新 clientOutputStreams.add(作家); 显然,这种字符串数组应该被发送到聊 ...

  6. BAT蝙蝠视频聊天室(服务器+客户端+架设相关软件)免费提供

    BAT蝙蝠视频聊天室(服务器+客户端+架设相关软件) 网盘下载: http://adf.ly/5kgdg 介绍:

  7. 实战即时聊天,一文说明白:聊天服务器+聊天客户端+Web管理控制台。

    目录 一.前言 二.最终效果 1.聊天服务器 2.聊天客户端 3.Web管理控制台 三.需求分析 四.概要设计 1.技术选型 1)聊天服务端 2)Web管理控制台 3)聊天客户端 4)SpringBo ...

  8. 400-集群聊天服务器的客户端开发

    我们之前把聊天服务器的代码基本上功能开发完了,在后面转成集群版本的时候要引入中间件-基于发布订阅的Redis. 现在我们先开始客户端的开发 我们聊天服务器项目工程的客户端和服务器会共用很多代码,所以把 ...

  9. Java实现即时聊天:聊天服务器+聊天客户端+Web管理控制台

    来源:cnblogs.com/blogtimes/p/14767484.html 一.前言 说实话,写这个玩意儿是我上周刚刚产生的想法,本想写完后把代码挂上来赚点积分也不错.写完后发现这东西值得写一篇 ...

  10. c++网络编程:实现简单的聊天——基于服务器/客户端的模式

    c++ socket编程 服务器/客户端 最近在学c++网路编程,写个帖子记录自己的学习过程,部分内容参考一个博主的,附上他的链接: link 实现: 客户端往服务器端发送一条数据,服务器端接收数据并 ...

最新文章

  1. Oracle中Scott账户常见表的样本查询编程与数据库
  2. 七牛技术总监陈超:记Spark Summit China 2015
  3. python高斯滤波和降噪_高斯滤波原理及python实现
  4. Exchange端口列表
  5. activemq生产者和消费者的双向通信
  6. J.U.C - 其它组件
  7. java 线程释放_如何手动释放一个java线程占用的资源
  8. 四二拍用音符怎么表示_2020圣诞平安夜怎么发朋友圈?朋友圈关于平安夜经典语录精选...
  9. C#自动识别文件编码
  10. 【CAR笔记2】IGBT相关知识
  11. etf基金代码大全_再谈深得我心的指数基金:纳指ETF
  12. 13个免费资源网站,你想要的全都有!【各类宝藏资源,建议收藏】
  13. 共建WEB3.0基础设施 NodeSea推出分布式域名后缀 .fil .bzz .xch .iot
  14. 挑战基础软件皇冠明珠,TiDB 性能竞赛战果揭晓
  15. Backtrader量化平台教程(五)Signal
  16. Ubuntu 修改分辨率
  17. 没有你看不懂的Kmeans聚类算法
  18. ⭐UI自动化工具轻松实现微信消息收发⚡朋友圈爬取⁉️
  19. 【vue】【intersectionObserver】滚动正文时菜单滚动到对应菜单
  20. 台式机做U盘启动盘----win7旗舰版原装系统重装

热门文章

  1. elementui不生效
  2. Android 手机设置中铃声设置里的通知音量与铃声音量的分离
  3. 如何破解winrar(可用)
  4. Yarn的任务推测执行机制
  5. 《黑客与画家》读后感之一
  6. 微信oauth2的认证
  7. 滕振宇谈如何进行单元测试
  8. python node.js ruby_Python/Ruby/Node.js/Perl - 随笔分类 - bluefrog - 博客园
  9. 班得瑞[Bandari]音乐介绍
  10. 只有你想不到的 看看这些另类的可穿戴设备