资源简介
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语言课程论文
- 下一篇:华工操作系统复习资料
相关资源
- 数据库系统基础教程答案第三版机械
- 软考数据库系统工程师复习资料(完
- MoNyog8.5+破解补丁
- ANSYS LS-DYNA
- 全国4级地址库,京东数据
- 一个超简单的企业管理系统(带ACCE
- 数据库课设:图书管理系统报告
- 合同管理系统的源代码(附数据库)
- ado数据库MFC图书管理系统vs2010
- 数据库VFP课程设计
- 数据库实现学生成绩管理系统选课管
- 排队机叫号 源代码
- Access数据库在线编辑器
- Php 导出数据为EXCEL程序
- 人大金仓数据库系统表
- 模拟ATM柜员机系统--连接数据库
- 用工厂模式开发多数据库连接类
- 图片存储到数据库保存二进制文件并
- 数据库水印嵌入提取数据库水印数据
- 数据库课程设计以及指导思想
- 加班网上管理 单位
- 数据库课程设计报告(关于房地产销
- 数据库课程设计(改改直接交)
-
将数据库的表生成xm
l文件 - Ajax定时读取数据库(源代码发布)
- 浪潮数据库结构
- 数据库查询优化算法
- PB做的俄罗斯方块
- 典当综合业务管理系统(完整版)
- 标准化题库考试系统
评论
共有 条评论