本项目提供了一个基于Linux系统的C语言实现的聊天室程序源代码和详细的说明文档。适合于学习网络编程、多线程技术以及Socket通信机制的学生或开发者使用。
客户端采用多线程技术设计:一个线程负责接收服务器消息;另一个则用于向服务器发送消息。而服务器端使用select()函数实现IO复用。
用户登录流程如下:
1. 客户端从用户处获取用户名及密码,并将这些信息存储在一个结构体中,然后将其发送至服务端。
2. 服务端接收到客户端的结构体后,在文件内查找对应的用户名和密码。若找到,则在链表里添加新的节点;接着遍历此链表验证用户的登录信息。
3. 若用户的信息被成功验证,服务器将返回一个登陆成功的消息给客户端,反之则发送“登陆失败”的消息。
4. 当服务端确认了正确的身份认证后,它会创建一个新的套接字newfd,并将其与用户名一起存储在一个结构体中以记录在线的用户信息。
一对多聊天功能包括:
1. 客户端将欲发送的信息传输给服务器。
2. 服务器遍历保存所有在线用户的链表,找到每个用户的描述符后向他们各自传送消息。
3. 若输入“:)”, “:(” 或者 bye 将分别代表笑脸、悲伤表情和退出聊天;此外,对于包含敏感词汇(如“fuck”、“shit”)的信息将被禁止发送。
一对一的私聊功能如下:
1. 客户端需同时提供欲传送的消息及接收者的名称,并将其传递给服务器。
2. 服务端依据收到的名字查找在线用户链表中的对应套接字描述符,然后向该用户的客户端传输消息。
3. 类似于一对多聊天方式,此功能也支持通过“:)”, “:(” 和 bye 分别发送表情符号和退出对话;同时会阻止包含敏感词汇的信息的传送。
文件传输包括:
1. 客户端首先将要发送的文件名及接收者的名称传送给服务器。
2. 服务端接收到请求后,先重命名该文件(以避免同名冲突),再通过消息的形式把新的文件路径和内容发给客户端。
3. 当客户端接收到带有“#”标识的消息时,则开始执行相应的文件下载操作。
管理员模式包括:
1. 禁言:允许服务器端对特定用户进行发言限制;
2. 解禁:恢复被禁止用户的正常聊天权限。