Linux下C实现的聊天室
实现目标
一个在Linux下可以使用的聊天软件,要求至少实现如下功能:
1. 采用Client/Server架构
2. Client A 登陆聊天服务器前,需要注册自己的ID和密码
3. 注册成功后,Client A 就可以通过自己的ID和密码登陆聊天服务器
4. 多个Client X 可以同时登陆聊天服务器之后,与其他用户进行通讯聊天
5. Client A成功登陆后可以查看当前聊天室内其他在线用户Client x
6. Client A可以选择发消息给某个特定的Client X,即”悄悄话”功能
7. Client A 可以选择发消息全部的在线用户,即”群发消息”功能
8. Client A 在退出时需要保存聊天记录
9. Server端维护一个所有登陆用户的聊天会的记录文件,以便备查
可以选择实现的附加功能:
1. Server可以内建一个特殊权限的账号admin,用于管理聊天室
2. Admin可以将某个Client X “提出聊天室”
3. Admin可以将某个Client X ”设为只能旁听,不能发言”
4. Client 端发言增加表情符号,可以设置某些自定义的特殊组合来表达感情.如输入:),则会自动发送”XXX向大家做了个笑脸”
5. Client段增加某些常用话语,可以对其中某些部分进行”姓名替换”,例如,输入/ClientA/welcome,则会自动发送”ClientA 大侠,欢迎你来到咱们的聊天室”
附加功能:
文件传输
部分主要代码:
客户端:
client_main.h
#include "../../include/server_handle.h"/***************************************************函数名:server_view功能:处理客户端查看当前在线用户传入参数:struct message *a, clientinf *clientNode返回值:无***************************************************/int server_view(struct message *a, clientinf *clientNode){char str[MAXLEN],buf[MAXLEN]; LinkList L; int i = 1; L = clientlink; L=L->next; memset(buf,0,strlen(buf)); while(L != NULL) { memset(str,0,strlen(str));if(L->data.speak==1){sprintf(str,"%d. %s (在线)\n",i,L->data.name);my_strcat(buf,str);}else{sprintf(str,"%d. %s (禁言)\n",i,L->data.name);my_strcat(buf,str);} L = L->next; i++; } my_strcpy((*a).name,(*clientNode).name); my_strcpy((*a).msg,buf); my_send((*clientNode).decr,a,sizeof(struct message),0);}