Implémentation de l'ajout de la fonction SQLite de base de données basée sur la salle de discussion du système Linux (08)

Après avoir tout maîtrisé, démarrez cet article.

1. Ajustez la structure des répertoires

Afin de faciliter la compilation, nous ajustons maintenant la structure du code de l'article précédent comme suit.

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

Le répertoire de fichiers final avec les données ajoutées est le suivant :

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  est utilisé pour effacer les fichiers temporaires gcc.sh  est utilisé pour compiler l'intégralité du projet

Le code serveur est placé dans le répertoire chat_server, le code client est placé dans le répertoire chat_client ;

Les codes liés à la base de données sont placés sous chat_server/data.

chat.h est un fichier d'en-tête utilisé par tous les clients et serveurs, il est donc placé dans le répertoire racine.

Après avoir ajouté des fonctions ultérieurement, les nouveaux fichiers d'en-tête et les fichiers C peuvent être ajoutés respectivement aux répertoires include et src du répertoire de projet correspondant.

2. Concevoir des tables de base de données

Toutes les informations client que nous conservions auparavant se trouvaient dans un tableau global et il n'y avait pas de fonction de sauvegarde. Nous devons maintenant enregistrer toutes les informations client dans la base de données.

Répertoire de stockage de la base de données

chat_server/data

Nom de la base de données:

user.db

Nom de la table pour stocker les informations utilisateur :

user

Le format de la table utilisateur est le suivant :

nom Les attributs illustrer
nom TEXTE CLÉ PRIMAIRE Nom d'utilisateur, ne peut pas être répété
mot de passe TEXTE NON NUL mot de passe
fd INT NON NULL Descripteur de socket : -1 signifie pas en ligne, >0 signifie en ligne
directeur INT NON NULL Si le nom d'utilisateur est enregistré : -1 non enregistré, 1 enregistré

3. Déclarations et fonctions des principales opérations fonctionnelles

La chose la plus importante pour les opérations de base de données, ce sont les instructions. Les instructions d'implémentation correspondant aux différentes fonctions sont expliquées ci-dessous.

1 Créer un utilisateur de table

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 Ajouter un utilisateur

Une fois que le client a envoyé une demande d'enregistrement, le serveur enregistre les informations utilisateur dans la base de données.

Les instructions d'opération de base de données sont les suivantes :

insert into user values('一口Linux', '123456',-1, 1)

La fonction fonction est la suivante :

int db_add_user(char name[],char passwd[])
功能:
增加一个用户,执行该函数前需要先判断该用户名是否存在

参数:
name:用户名
passwd:密码

返回值:
-1:失败
1:成功

3 Déterminer si l'utilisateur est en ligne

Une fois que le client a envoyé la commande de connexion, le serveur utilise cette fonction pour déterminer si l'utilisateur s'est connecté avec succès.

Les instructions d'opération de base de données sont les suivantes :

select fd from user where name='嵌入式Linux'

La fonction fonction est la suivante :

int db_user_if_online(char *name,char *passwd)
功能:
判断用户是否在线,该函数主要根据fd的值来判断用户是否在线

参数:
name:用户名
passwd:密码  

返回值:
1:在线
-1:不在线
-2:用户不存在

4 Déterminer si un nom d'utilisateur est enregistré

L'utilisateur envoie une commande d'enregistrement et le serveur doit déterminer si le nom d'utilisateur a déjà été enregistré.

Les instructions d'opération de base de données sont les suivantes :

select regist from user where name='嵌入式Linux'

La fonction fonction est la suivante :

int db_user_if_reg(char *name)
功能:
判断某个用户名是否注册过

参数:
name:用户名

返回值:
 1:注册过
-1:没有注册过

5 Déterminez si le nom d'utilisateur et le mot de passe sont corrects

L'utilisateur envoie une commande de connexion et doit déterminer si le nom d'utilisateur et le mot de passe sont corrects.

Les instructions d'opération de base de données sont les suivantes :

select * from user where name='嵌入式Linux' and passwd='123456'

La fonction fonction est la suivante :

int db_user_pwd_corrct(char *name,char* passwd)
功能:
判断客户端发送的用户名密码是否正确

参数:
name:用户名
passwd:密码

返回值:
 1:正确
-1:用户名或者密码不正确

6 Les utilisateurs se connectent et se déconnectent

Une fois que l'utilisateur s'est connecté avec succès, a envoyé une demande de déconnexion ou a été anormalement déconnecté, l'état de la base de données doit être mis à jour.

Les instructions d'opération de base de données sont les suivantes :

UPDATE  user set fd=-1 where name='嵌入式Linux'

La valeur de fd est le descripteur de socket. Le paramètre hors ligne est -1 et le paramètre de la ligne supérieure est la valeur correspondante >0.

La fonction fonction est la suivante :

int db_user_on_off(int fd,char *name,unsigned int on_off) 
功能:
更新数据库中用户的fd字段

参数:
fd:套接字描述符
name:用户名
on_off:上线还是下线

返回值:
 1:正确
-1:失败

7. Afficher les utilisateurs en ligne

Une fois que l'utilisateur a envoyé la commande pour afficher les utilisateurs en ligne, le serveur recherche tous les utilisateurs en ligne dans la base de données et envoie les noms au client en boucle.

int db_list_online_user(int fd)

4. Résultats de l'opération

compiler

./gcc.sh

1. Démarrage du serveur

./server 9999

Le numéro de port est défini sur 9999

image

2. Inscription des clients

Début du client

./client 127.0.0.1 9999

Sélectionnez 1 pour vous inscrire et entrez votre nom d'utilisateur et votre mot de passe.

image

3. Connexion utilisateur

Entrez l'option 2 et entrez le nom d'utilisateur et le mot de passe que vous venez d'enregistrer. S'ils sont incohérents, une erreur s'affichera.

image

connexion réussie:

image

4. Inscrivez-vous et connectez plusieurs autres utilisateurs

Inscrivez-vous et connectez les nouveaux utilisateurs 111, 222, 333

image

5. Discussion publique

Sélectionnez l'option 3 pour accéder au chat public. L'utilisateur Yikou dit bonjour à tous les utilisateurs !

image

On voit que tous les utilisateurs ont reçu le message.

6. Chat privé

L'utilisateur Yikou envoie un message à l'utilisateur 111 : 

Comme le montre la figure ci-dessous, seul l'utilisateur 111 a reçu les informations, et aucun autre utilisateur n'a reçu les informations.

image

7. Afficher les utilisateurs en ligne

image

8. Afficher les informations finales de la base de données

image

5. Description des codes

Afin de permettre aux lecteurs de comprendre la différence entre l'ajout d'une base de données et la suppression de données,

Utilisez git pour maintenir les versions.

image

Pour passer à la version sans base de données, exécutez la commande suivante.

git reset --hard  597330ae0a183c9db8f68b7c9f60df94f8965778

Pour revenir à la version avec base de données, exécutez la commande suivante :

git reset --hard 10bfbfaf2d09ae895313273c960ecfd84663f9fd

Après avoir utilisé la base de données, le stockage et la gestion des données sont plus pratiques, les types de données sont plus faciles à développer et les relations logiques sont plus claires.

Pour obtenir le code complet, visitez directement https://gitee.com/wx_98fa5ee790/chat

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41114301/article/details/133386316
conseillé
Classement