基于Socket的单人、多人在线聊天服务器

网络通信服务器


版本说明

  • v0.1:客户端将发送的消息通过服务端“转发”给所有客户端
  • v0.2:客户端可以根据提示进行查看好友群聊、添加好友、添加群聊、创建群聊、删除好友、删除群聊、单聊、群聊等功能

开发环境

  • 开发环境:Windows

  • 开发工具:Visual Studio 2015

  • 开发语言:C/C++

  • 数据库:MySQL

主要功能

基于服务器转发的聊天,现有功能包括:

  • 查看好友与群聊
  • 添加好友
  • 添加群聊
  • 创建群聊
  • 删除好友
  • 删除群聊
  • 单聊
  • 群聊

主要原理

流程

服务器

  • 创建套接字,绑定端口并对端口进行监听
  • 通过select监视多个可读文件描述符
  • 接收客户端的消息并解析,将结果返回给对应客户端

客户端

  • 创建套接字,连接服务器
  • 用户登录
  • 通过select监视读写文件描述符
    • 待读事件:从服务器获取消息通知
    • 待写事件:客户端作出聊天操作

数据库相关

  • 客户端添加好友、加入群聊等操作将对应信息存入数据库
  • 服务端接收群聊消息,转发给客户端时也从数据库中获取群聊消息

使用方式

  1. 启动服务器
  2. 启动客户端
  3. 用户登录(未注册账号自动注册)
  4. 进行聊天操作
  5. 关闭客户端

客户端间的聊天方式如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JHZ2U8c-1647007065410)(images/聊天示意图.png)]

通信消息格式定义

首字符用于表示消息类型,接着空格,From用户,空格,To用户,空格,真实数据

  • 消息类型:
    • ‘0’、添加好友
    • ‘1’、添加群聊
    • ‘2’、创建群聊
    • ‘3’、删除好友
    • ‘4’、删除群聊
    • ‘5’、单聊
    • ‘6’、群聊
  • From用户
  • To用户(或群聊)
  • 真实数据

TODO

  • 控制台终端的编码格式是936(gbk),存入数据库后(utf-8)中文会乱码,改成65001后仍旧乱码,未解决
  • 使用控制台进行聊天并不方便,可以考虑加入UI
  • 考虑客户端离线的情况下,未接收到的消息存到数据库中,每次启动客户端的时候都检查一下有没有未处理的消息

仓库地址

https://github.com/tracykim/MyChat

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值