• 大小: 32KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-30
  • 语言: 其他
  • 标签: 数据库  

资源简介

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


评论

共有 条评论