www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > C語言編程
[導(dǎo)讀]一.調(diào)整目錄結(jié)構(gòu)為了方便編譯,現(xiàn)在我們將前面文章的代碼結(jié)構(gòu)做如下調(diào)整。root@ubuntu:/mnt/hgfs/code/chat#?tree?..├──?chat_client│???├──?include│???├──?Makefile│???├──?obj│???│???...


一. 調(diào)整目錄結(jié)構(gòu)

為了方便編譯,現(xiàn)在我們將前面文章的代碼結(jié)構(gòu)做如下調(diào)整。

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
最終增加了數(shù)據(jù)的文件目錄如下:

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 用于清除臨時(shí)文件gcc.sh 用于編譯整個(gè)工程

服務(wù)端代碼放置到chat_server目錄下;客戶端代碼放置到chat_client目錄下;

數(shù)據(jù)庫相關(guān)代碼放在chat_server/data下。

chat.h是所有客戶端和服務(wù)器都會(huì)用到的頭文件,所以放置在根目錄下。

后續(xù)增加功能后,新增的頭文件和C文件分別添加到對(duì)應(yīng)工程目錄的include和src目錄下即可。

二、 設(shè)計(jì)數(shù)據(jù)庫表

我們之前維護(hù)的所有客戶端的信息是用一個(gè)全局?jǐn)?shù)組,并且沒有保存功能,現(xiàn)在我們要把所有客戶端的信息全部保存到數(shù)據(jù)庫中。

數(shù)據(jù)庫存儲(chǔ)的目錄

chat_server/data
數(shù)據(jù)庫名:

user.db
存儲(chǔ)用戶信息的表名:

user
表user格式如下:

名稱屬性說明
nameTEXT PRIMARY KEY用戶名,不能重復(fù)
passwdTEXT NOT NULL密碼
fdINT NOT NULL套接字描述符:-1表示不在線,>0表示在線
registINT NOT NULL用戶名是否注冊(cè):-1沒有注冊(cè),1注冊(cè)

三、 主要功能操作的語句及函數(shù)

數(shù)據(jù)庫操作最重要的就是語句,下面講解針對(duì)不同的功能對(duì)應(yīng)的實(shí)現(xiàn)語句

1 創(chuàng)建表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 增加一個(gè)用戶

客戶端發(fā)送注冊(cè)請(qǐng)求后,服務(wù)器端注冊(cè)用戶信息到數(shù)據(jù)庫中

數(shù)據(jù)庫操作語句如下:

insert?into?user?values('一口Linux',?'123456',-1,?1)
功能函數(shù)如下:

int?db_add_user(char?name[],char?passwd[])
功能:
增加一個(gè)用戶,執(zhí)行該函數(shù)前需要先判斷該用戶名是否存在

參數(shù):
name:用戶名
passwd:密碼

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

3 判斷用戶是否在線

客戶端發(fā)送登陸命令后,服務(wù)器通過該函數(shù)判斷該用戶是否已經(jīng)登陸成功

數(shù)據(jù)庫操作語句如下:

select?fd?from?user?where?name='一口Linux'
功能函數(shù)如下:

int?db_user_if_online(char?*name,char?*passwd)
功能:
判斷用戶是否在線,該函數(shù)主要根據(jù)fd的值來判斷用戶是否在線

參數(shù):
name:用戶名
passwd:密碼??

返回值:
1:在線
-1:不在線
-2:用戶不存在

4 判斷某個(gè)用戶名是否注冊(cè)

用戶發(fā)送注冊(cè)命令,服務(wù)器需要判斷該用戶名是否已經(jīng)被注冊(cè)過

數(shù)據(jù)庫操作語句如下:

select?regist?from?user?where?name='一口Linux'
功能函數(shù)如下:

int?db_user_if_reg(char?*name)
功能:
判斷某個(gè)用戶名是否注冊(cè)過

參數(shù):
name:用戶名

返回值:
?1:注冊(cè)過
-1:沒有注冊(cè)過

5 判斷用戶名密碼是否正確

用戶發(fā)送登陸命令,需要判斷用戶名密碼是否正確

數(shù)據(jù)庫操作語句如下:

select?*?from?user?where?name='一口Linux'?and?passwd='123456'
功能函數(shù)如下:

int?db_user_pwd_corrct(char?*name,char*?passwd)
功能:
判斷客戶端發(fā)送的用戶名密碼是否正確

參數(shù):
name:用戶名
passwd:密碼

返回值:
?1:正確
-1:用戶名或者密碼不正確

6 用戶上線、下線

用戶登陸成功后,或者發(fā)送下線申請(qǐng),或者異常掉線,需要更新數(shù)據(jù)庫的狀態(tài)。

數(shù)據(jù)庫操作語句如下:

UPDATE??user?set?fd=-1?where?name='一口Linux'
fd的值是套接字描述符,下線設(shè)置為-1,上線設(shè)置為對(duì)應(yīng)的>0的值

功能函數(shù)如下:

int?db_user_on_off(int?fd,char?*name,unsigned?int?on_off)?
功能:
更新數(shù)據(jù)庫中用戶的fd字段

參數(shù):
fd:套接字描述符
name:用戶名
on_off:上線還是下線

返回值:
?1:正確
-1:失敗

7. 顯示在線用戶

用戶發(fā)送顯示在線用戶命令后,服務(wù)器從數(shù)據(jù)庫當(dāng)中查找所有在線用戶,并將姓名循環(huán)發(fā)送給客戶端

int?db_list_online_user(int?fd)

四、運(yùn)行結(jié)果

編譯


./gcc.sh

1.服務(wù)器啟動(dòng)

./server?9999
端口號(hào)設(shè)定為9999

2. 客戶端注冊(cè)

客戶端啟動(dòng)

./client?127.0.0.1?9999
選擇1 ?注冊(cè),輸入用戶名密碼即可。

3. 用戶登錄

輸入選項(xiàng)2,輸入剛才注冊(cè)的用戶名密碼,如果不一致會(huì)提示錯(cuò)誤登錄成功:

4. 注冊(cè)登錄其他幾個(gè)用戶

注冊(cè)并登錄新的用戶111、222、333

5. 公聊

選擇選項(xiàng)3,即進(jìn)入公聊, 用戶yikou向所有用戶說:hello!可見所有用戶均收到信息。

6. 私聊

用戶yikou向用戶111發(fā)送信息:由下圖可知,只有用戶111收到該信息,其他用戶均沒有收到信息。

7. 顯示在線用戶

8. 查看最終數(shù)據(jù)庫信息

五、代碼說明

為方便讀者學(xué)習(xí)增加數(shù)據(jù)庫和去掉數(shù)據(jù)之間的差別,

用git維護(hù)版本。

切換到?jīng)]有數(shù)據(jù)庫的版本,執(zhí)行下面命令即可。

git?reset?--hard??597330ae0a183c9db8f68b7c9f60df94f8965778
要切回有數(shù)據(jù)庫的版本執(zhí)行下面的命令:

git?reset?--hard?10bfbfaf2d09ae895313273c960ecfd84663f9fd
使用數(shù)據(jù)庫后,數(shù)據(jù)的存儲(chǔ)管理更加方便,數(shù)據(jù)類型更易于擴(kuò)充, 邏輯關(guān)系也更加清晰。

版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認(rèn),我們都會(huì)標(biāo)明作者及出處,如有侵權(quán)煩請(qǐng)告知,我們會(huì)立即刪除并表示歉意。謝謝!


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

CPU親和度通過限制進(jìn)程或線程可以運(yùn)行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關(guān)鍵字: Linux 嵌入式

北京——2025年8月15日,亞馬遜云科技日前宣布,Amazon DocumentDB Serverless已正式可用,這是Amazon DocumentDB(兼容MongoDB)的一種全新配置,能夠根據(jù)應(yīng)用程序需求自動(dòng)...

關(guān)鍵字: 數(shù)據(jù)庫 服務(wù)器

濟(jì)南2025年8月12日 /美通社/ -- 近年來,國(guó)家大力推進(jìn)信創(chuàng)產(chǎn)業(yè)發(fā)展,明確要求關(guān)鍵行業(yè)信息系統(tǒng)實(shí)現(xiàn) "自主可控、安全可靠",老年教育領(lǐng)域作為民生服務(wù)的重要陣地,其信息化建設(shè)的國(guó)產(chǎn)化適配已成為行...

關(guān)鍵字: 全棧 BSP 數(shù)據(jù)庫 加密

在Linux系統(tǒng)性能優(yōu)化中,內(nèi)存管理與網(wǎng)絡(luò)連接處理是兩大核心領(lǐng)域。vm.swappiness與net.core.somaxconn作為關(guān)鍵內(nèi)核參數(shù),直接影響系統(tǒng)在高負(fù)載場(chǎng)景下的穩(wěn)定性與響應(yīng)速度。本文通過實(shí)戰(zhàn)案例解析這兩個(gè)...

關(guān)鍵字: Linux 內(nèi)存管理

助力企業(yè)更快、更輕松地遷移VMware工作負(fù)載,無需重構(gòu)應(yīng)用或變更架構(gòu)

關(guān)鍵字: 云服務(wù) 生成式AI 數(shù)據(jù)庫

對(duì)于LLM,我使用b谷歌Gemini的免費(fèi)層,所以唯一的成本是n8n托管。在使用了n8n Cloud的免費(fèi)積分后,我決定將其托管在Railway上(5美元/月)。然而,由于n8n是開源的,您可以在自己的服務(wù)器上托管它,而...

關(guān)鍵字: 人工智能 n8n Linux

在Linux系統(tǒng)管理中,權(quán)限控制是安全運(yùn)維的核心。本文通過解析/etc/sudoers文件配置與組策略的深度應(yīng)用,結(jié)合某金融企業(yè)生產(chǎn)環(huán)境案例(成功攔截98.7%的非法提權(quán)嘗試),揭示精細(xì)化權(quán)限管理的關(guān)鍵技術(shù)點(diǎn),包括命令別...

關(guān)鍵字: Linux 用戶權(quán)限 sudoers文件

Linux內(nèi)核中的信號(hào)量(Semaphore)是一種用于資源管理的同步原語,它允許多個(gè)進(jìn)程或線程對(duì)共享資源進(jìn)行訪問控制。信號(hào)量的主要作用是限制對(duì)共享資源的并發(fā)訪問數(shù)量,從而防止系統(tǒng)過載和數(shù)據(jù)不一致的問題。

關(guān)鍵字: Linux 嵌入式

在云計(jì)算與數(shù)據(jù)庫高可用場(chǎng)景中,LVM(Logical Volume Manager)的動(dòng)態(tài)擴(kuò)展能力已成為保障業(yè)務(wù)連續(xù)性的關(guān)鍵技術(shù)。某金融企業(yè)通過LVM在線擴(kuò)容將數(shù)據(jù)庫停機(jī)時(shí)間從2小時(shí)縮短至30秒,但操作不當(dāng)仍可能導(dǎo)致數(shù)據(jù)...

關(guān)鍵字: LVM 數(shù)據(jù)庫

在云計(jì)算與容器化技術(shù)蓬勃發(fā)展的今天,Linux網(wǎng)絡(luò)命名空間(Network Namespace)已成為構(gòu)建輕量級(jí)虛擬網(wǎng)絡(luò)的核心組件。某頭部互聯(lián)網(wǎng)企業(yè)通過命名空間技術(shù)將測(cè)試環(huán)境資源消耗降低75%,故障隔離效率提升90%。本...

關(guān)鍵字: Linux 云計(jì)算
關(guān)閉