说在前面
暑假留校的主要任务是学习linux下的c语言编程,之前写了my_ls, my_shell这两个可以说是练手的小项目,而最后的项目聊天室也是花了自己快两周的时间,说实话第一次写这种(对自己而言)大项目,最深刻的体会就是整体的架构很重要,很重要,很重要…
项目概述
Linux 环境下的简易聊天室,采用C/S模型,实现多客户端之间的稳定数据传输。
功能
- 登陆注册账号,登陆时密码不会显
- 好友管理
a. 查看好友列表(不同颜色代表不同的状态)
b. 添加好友
c. 删除好友
d. 屏蔽好友 - 群管理
a. 查看所加群,查看群中成员
b. 创建群
c. 加群
d. 退群
e. 解散群
f. 设置管理员
g. 踢人 - 聊天通讯
a. 私聊
b. 群聊
c. 查看聊天记录 - 离线传输
a. 离线消息
b. 离线文件 - 传送文件
- 容错处理
- 对服务器要求
a. 面对同时大量的客户端发送连接与数据时,服务器能正常处理
b. 客户端的意外退出,不会导致服务器退出
c. 数据能够正确接收和发送
相关技术
- socket编程(基础)
- MySQL数据库
- I/O多路复用(epoll)
- 线程池
功能截图
思路
服务端:
1. 创建套接字,绑定数据库,创建epoll句柄,通过while循环检测是否有请求到来,有请求到来时向线程池中添加任务
2. 创建3个链表,分别是储存用户信息,关系,以及聊天记录
3. ctrl + c 退出,销毁线程池,销毁链表,关闭套接字,关闭epoll描述符,释放资源
客户端:创建套接字,登陆成功后开启接收线程
注:客户端收发数据一定要分开写