一. 引言
聊天室基于C/S模型设计
开发工具
Deepin GNU/Linux 20.2.1
gcc编译器
项目参考
名称 |
---|
LinuxC编程实战 |
CSDN |
术语表
术语 | 说明性定义 |
---|---|
C/S | client/server模型 |
epoll | I/O多路复用 |
二. 功能:
- 登录、注册
- 好友的增、删、查、屏蔽、私聊、查找聊天记录
- 群的增、删、查、设置管理、群聊、踢人
- 文件传输
- 支持部分离线
三. 概述:
聊天室基于C/S模型设计,所用数据库为MYSQL
C/S模型:
服务端用到epoll+单线程实现
客户端分两个线程-一读一写
1 服务端
运用了epoll+单线程
1 第一先处理连接请求,事件请求等待
2 若文件描述符可读则处理此事件
2 客户端
开了两个线程,一个接收服务器发的包,一个向服务器发包
1.第一目录:注册登录
2.第二目录:细分为-朋友、群、修改密码、好友请求、退出
3.第三目录:实现聊天室的各项功能
因为客户端开了两个线程,不可避免遇到同步处理问题
解决办法:使用条件变量实现线程同步
四. 部分功能设计展示:
-
登录注册界面
-
分类界面
-
朋友管理界面
-
群管理界面
-
本机私聊界面
私聊没有私聊窗口,格式不够美观,后续会继续改进,也可以加入左右格式,这样更好区分两人,就不用把账号输出来了
6.查看好友列表
具体功能在另一篇博客展示
五. 数据库建表:
聊天室建立了六张表
friend:存好友及其关系
group_mess:存放群内人的信息
groups:存放群信息
message:存放好友私聊消息
password:存放修改密码的时间
user:存放个人信息
六. 编译运行
服务端:
gcc -I/usr/include/mariadb/mysql server.c -lmysqlclient -ldl -lpthread -o server
./server
客户端:
gcc client.c -o client -lpthread
./client -a 127.0.0.1 -p 4507 【-a后加IP,-p后加设置端口号】
七. 存在的问题:
- 基础功能有实现,但进阶功能没有实现,后面会继续修改
- 客户端登录状态会异常断开,这需要后续继续修改
- 文件传输有时会传不过去
- 服务端实用性较差,后续会继续完善
- 还没有解决客户端突然断开,客户端登录状态问题