-
Linux C语言聊天室项目,包含【源代码】与【配套说明文档】
资源介绍
客户端,采用多线程。一个接收服务器消息,一个发送消息给服务器。
服务器,采用select()进行IO复用。
编译文件是Makefile。
(1)用户登录:
【1】client端接收用户名和密码->存于结构体中->将结构体发送给server端。
【2】server端接收client发送的结构体->打开存储用户名密码的文件->文件写入链表中->遍历链表验证用户信息。
【3】server端验证正确发送“登陆成功”消息,错误发回“登陆失败”消息。client端接收,“登陆成功”则进入聊天,“登陆失败”则跳出。
【4】若验证成功,server端产生一个新的套接字newfd,将它与用户名封装于同一个结构体中,存储在线用户的信息。
消息、存储在线用户信息结构体:
typedef struct message
{
int type; //服务器用于判断该执行的功能
int fd;
int mode; //标志位,表示用户的发言权限,1为正常,0为禁言
char name[NAMELEN];
char mima[NAMELEN];
char from[20];
char to[20]; //聊天时的收信人
char file_name[20]; //发送文件时的文件名
char mtext[100]; //聊天时发送的消息内容
struct message *next;
}Mess;
(2)一对多聊天:
【1】client端发送欲发送的信息给server端。
【2】server端遍历在线人信息链表,找到每个在线人的套接字描述符,将消息发送给链表中的每个人。
【3】可以通过输入“:)”, “:(”, “bye”来发送笑脸,悲伤脸和退出聊天;检测敏感词汇“fuck”、“shit”,禁止发送。
(3)一对一聊天:
【1】client端发送欲发送的信息和信息的接收者给server端。
【2】server端根据收到的接收者名字在在线人链表中查找该接收者的套接字描述符,找到后就将消息发送给该接收者。
【3】可以通过输入“:)”, “:(”, “bye”来发送笑脸,悲伤脸和退出聊天;检测敏感词汇“fuck”、“shit”,禁止发送。
(4)文件传输
【1】client端发送预发送的文件名和接收者名字到server端。
先打开(不存在则创建)一个文件,将文件内容读到缓冲区buffer,再将buffer的内容复制到结构体Mess中,最后将结构体发送给server端。
【2】server端先将接收到的文件重命名(因为相同文件目录下不能存在同名文件),再将收到的文件和新的文件名一同放入tab1中(并且在tab1开头写“#”)发送给client端。
【3】当client端收到以“#”开头的消息,执行文件接收,先创建一个文件,再写入相应内容。
(5)管理员模式
【1】禁言
【2】解禁