日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > C語(yǔ)言編程
[導(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目錄下;客戶(hù)端代碼放置到chat_client目錄下;

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

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

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

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

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

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

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

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

user
表user格式如下:

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

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

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

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è)用戶(hù)

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

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

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

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

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

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

3 判斷用戶(hù)是否在線

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

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

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

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

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

返回值:
1:在線
-1:不在線
-2:用戶(hù)不存在

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

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

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

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

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

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

返回值:
?1:注冊(cè)過(guò)
-1:沒(méi)有注冊(cè)過(guò)

5 判斷用戶(hù)名密碼是否正確

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

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

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

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

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

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

6 用戶(hù)上線、下線

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

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

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ù)庫(kù)中用戶(hù)的fd字段

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

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

7. 顯示在線用戶(hù)

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

int?db_list_online_user(int?fd)

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

編譯


./gcc.sh

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

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

2. 客戶(hù)端注冊(cè)

客戶(hù)端啟動(dòng)

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

3. 用戶(hù)登錄

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

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

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

5. 公聊

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

6. 私聊

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

7. 顯示在線用戶(hù)

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

五、代碼說(shuō)明

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

用git維護(hù)版本。

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

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

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

版權(quán)申明:內(nèi)容來(lái)源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無(wú)法確認(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)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉