资源简介
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 ”设为只能旁听,不能发言”
简单完成版,后续还有新功能会添加!!!!!
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “headNode.h“
#include
#include
#define OK 0
#define SIZE 1024
#define PORT 9999
typedef struct _msg
{
char name[20];
char passwd[20];
char beiyong[20];
int cmd;
//int sig;
}Msg;
Node* head;
void delete_user (Msg *msgint client_socket);
void kickout (Msg *msgint client_socket);
int callback(void* pDataint nCountchar** pValuechar** pName);
void* shujuku(Msg *msgint sfd);
void reg(Msg *msg int sfd);
void login(Msg *msg int sfd);
void sefriends(int sfd);
void* fasong(void* v);//发送
void pchat(Msg *msgint sfd);
void quit(Msg* msgint sfd);
void* Gfsong(void* v);
void gchat(int sfd);
void rsetpd(Msg *msgint sfd);
void* handl_client(void* v);
int init_tcp();
int myAccept(int listen_fd);
void silent(Msg *msgint client_socket);
void silent_del (Msg *msg int client_socket);
void delete_user (Msg *msgint client_socket)
{
printf (“即将处理用户注销\n“);
// 打开数据库
sqlite3 *database;
int ret = sqlite3_open(“user.db“ &database);
if (ret != SQLITE_OK)
{
printf (“打开数据库失败\n“);
return;
}
// 删除 user 表中的信息
char buf[100];
char *errmsg = NULL;
sprintf (buf “delete from user where name=‘%s‘;“ msg->name);
ret = sqlite3_exec(database buf NULL NULL &errmsg);
if (ret != SQLITE_OK)
{
printf (“数据库操作失败:%s\n“ errmsg);
return;
}
// 关闭数据库
sqlite3_close(database);
printf (“删除成功,已关闭数据库\n“);
}
void silent(Msg *msgint client_socket)
{
printf(“正在处理管理员 admin 对成员 %s 的禁言请求\n“msg->name);
sqlite3 *database = NULL;
int ret = sqlite3_open(“user.db“&database);
if(ret != SQLITE_OK)
{
printf(“打开数据库失败!\n“);
msg->cmd = -2;
write(client_socketmsgsizeof(Msg));
return;
}
char *errmsg = NULL;
char **resultp = NULL;
int nrowncolumn;
char *sql = “select * from user“;
ret = sqlite3_get_table(databasesql&resultp&nrow&ncolumn&errmsg);
if(ret != SQLITE_OK)
{
printf(“数据库操作失败!\n“);
msg->cmd = -1;
write(client_socketmsgsizeof(Msg));
return;
}
int i;
for(i = ncolumn;i < (nrow+1)*ncolumn;i += ncolumn)
{
if(strcmp(resultp[i] msg->name)==0 && strcmp(resultp[i+4] “1“) == 0)
{
char buf[100];
errmsg = NULL;
sprintf (buf “update user set sig = 1 where name = ‘%s‘“msg->name);
ret = sqlite3_exec(database buf NULL NULL &errmsg);
if (ret != SQLITE_OK)
{
printf (“数据库操作失败:%s\n“ errmsg);
return;
}
msg->cmd = 9011;
write (atoi(resultp[i+3]) msg sizeof(Msg));
sqlite3_free_table(resultp);
sqlite3_clo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 17626 2018-09-20 09:19 7完成初版\1.server.c
文件 21052 2018-09-18 21:54 7完成初版\client
文件 24654 2018-09-18 21:53 7完成初版\client.c
文件 3468 2018-09-16 19:25 7完成初版\headNode.c
文件 889 2018-09-09 16:30 7完成初版\headNode.h
文件 16982 2018-09-18 21:54 7完成初版\serve
文件 16982 2018-09-17 21:15 7完成初版\server
文件 3072 2018-09-18 21:57 7完成初版\user.db
文件 2048 2018-09-18 21:55 7完成初版\xinxi.db
目录 0 2018-09-25 15:47 7完成初版
----------- --------- ---------- ----- ----
106773 10
- 上一篇:R语言课程论文
- 下一篇:华工操作系统复习资料
相关资源
- 学生信息管理系统数据库课程设计
- 医院体检管理系统包含数据库
- 数据库系统分析与设计论文)基于E
- 数据库课程设计小区物业管理系统
- 学生选课系统实验报告
- 超市信息系统数据库设计
- 电话计费管理系统数据库设计
- 数据库设计作业-教材订购系统
- 工资管理系统数据库系统设计
- 数据库全英考试试卷
- 数据库第四版答案.zip
- 医院信息管理+业务流程图+E-R图+系统
- 综合测评管理系统数据库系统设计
- 长途汽车信息管理系统数据库系统设
- 红河学院机房管理系统课程设计内服
- 高校学籍管理系统 数据库课程设计
- 软件分析与建模课程设计 家具城进销
- 山西大学数据库历年试卷--考研复试
- 数据库课程设计——仓库设备管理系
- 数据库课程设计仓库管理系统
- 销售信息系统,数据库课程设计 ,
- 长沙学院往届数据库考试试卷(参考
- 典型案例数据库设计
- KTV数据库.zip
- 学生学籍管理系统.doc
- 用友数据库表结构分析
- 银行储蓄及数据库报告
- 东南大学数据库往年试卷
- 大学生就业咨询数据库需求分析
- 银行管理系统数据库
评论
共有 条评论