从零实现源于Linux socket聊天室 增加数据库Sqlite功能5
发布时间:2021-11-22 13:51:07 所属栏目:系统 来源:互联网
导读:之前更新过从0实现聊天室的4篇文章,很多粉丝朋友还是觉得内容相对简单,本文一口君会在原有代码基础上增加数据库操作功能,后续文章还会增加文件传输功能。 本文需要增加数据库功能,关于数据库的基础知识点,表的创建、增删改查等操作,以及对应的库函数的
之前更新过从0实现聊天室的4篇文章,很多粉丝朋友还是觉得内容相对简单,本文一口君会在原有代码基础上增加数据库操作功能,后续文章还会增加文件传输功能。 本文需要增加数据库功能,关于数据库的基础知识点,表的创建、增删改查等操作,以及对应的库函数的使用请参考以下3篇文章: 《嵌入式数据库sqlite3【基础篇】-基本命令操作,小白一看就懂》 《嵌入式数据库sqlite3【进阶篇】-子句和函数的使用,小白一文入门》 《如何用C语言操作sqlite3,一文搞懂》 全部掌握后,开始进入本篇。 一. 调整目录结构 为了方便编译,现在我们将前面文章的代码结构做如下调整。 root@ubuntu:/mnt/hgfs/code/chat# tree . . ├── chat_client │ ├── include │ ├── Makefile │ ├── obj │ │ └── Makefile │ └── src │ ├── client.c │ └── Makefile ├── chat.h ├── chat_server │ ├── bin │ │ └── server │ ├── data │ ├── include │ ├── Makefile │ ├── obj │ │ └── server.o │ └── src │ ├── Makefile │ └── server.c └── gcc.sh 10 directories, 15 files 最终增加了数据的文件目录如下: peng@ubuntu:/mnt/hgfs/code/chat-sqlite$ tree . . ├── chat_client │ ├── include │ ├── Makefile │ ├── obj │ │ └── Makefile │ └── src │ ├── client.c │ └── Makefile ├── chat.h ├── chat_server │ ├── data │ ├── include │ │ └── data.h │ ├── Makefile │ ├── obj │ │ └── Makefile │ └── src │ ├── data.c │ ├── Makefile │ └── server.c ├── clean.sh ├── gcc.sh ├── user.db └── 解压密码.txt 9 directories, 17 files clean.sh 用于清除临时文件gcc.sh 用于编译整个工程 服务端代码放置到chat_server目录下;客户端代码放置到chat_client目录下; 数据库相关代码放在chat_server/data下。 chat.h是所有客户端和服务器都会用到的头文件,所以放置在根目录下。 后续增加功能后,新增的头文件和C文件分别添加到对应工程目录的include和src目录下即可。 二、 设计数据库表 我们之前维护的所有客户端的信息是用一个全局数组,并且没有保存功能,现在我们要把所有客户端的信息全部保存到数据库中。 数据库存储的目录 chat_server/data 数据库名: user.db 存储用户信息的表名: user 表user格式如下: 三、 主要功能操作的语句及函数 数据库操作最重要的就是语句,下面讲解针对不同的功能对应的实现语句 1.创建表user CREATE TABLE IF NOT EXISTS user(name TEXT PRIMARY KEY NOT NULL,passwd TEXT NOT NULL,fd INT NOT NULL,regist INT NOT NULL); 2.增加一个用户 客户端发送注册请求后,服务器端注册用户信息到数据库中 数据库操作语句如下: insert into user values('一口Linux', '123456',-1, 1) 功能函数如下: int db_add_user(char name[],char passwd[]) 功能: 增加一个用户,执行该函数前需要先判断该用户名是否存在 参数: name:用户名 passwd:密码 返回值: -1:失败 1:成功 3.判断用户是否在线 客户端发送登陆命令后,服务器通过该函数判断该用户是否已经登陆成功 数据库操作语句如下: select fd from user where name='一口Linux' 功能函数如下: int db_user_if_online(char *name,char *passwd) 功能: 判断用户是否在线,该函数主要根据fd的值来判断用户是否在线 参数: name:用户名 passwd:密码 返回值: 1:在线 -1:不在线 -2:用户不存在 4.判断某个用户名是否注册 用户发送注册命令,服务器需要判断该用户名是否已经被注册过 数据库操作语句如下: select regist from user where name='一口Linux' 功能函数如下: int db_user_if_reg(char *name) 功能: 判断某个用户名是否注册过 参数: name:用户名 返回值: 1:注册过 -1:没有注册过 5.判断用户名密码是否正确 用户发送登陆命令,需要判断用户名密码是否正确 数据库操作语句如下: select * from user where name='一口Linux' and passwd='123456' 功能函数如下: int db_user_pwd_corrct(char *name,char* passwd) 功能: 判断客户端发送的用户名密码是否正确 参数: name:用户名 passwd:密码 返回值: 1:正确 -1:用户名或者密码不正确 (编辑:广安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |