Linux--C項目:基于Linux的多用戶的航班購票系統(tǒng)
1、項目實施環(huán)境
vm虛擬機、ubuntu系統(tǒng)、vscode代碼編輯器
2、系統(tǒng)框架
2.1、客戶端功能框架

2.2、客戶端與服務(wù)端的TCP通信框架

3、項目細(xì)節(jié)分析
3.1.?用戶的信息鏈表,航班票鏈表,航班鏈表
保存用戶信息的鏈表使用的是單向不循環(huán)鏈表,其中航班票的頭節(jié)點也保存在用戶鏈表中,相當(dāng)于,鏈表中有一個用戶,就有一個節(jié)點指向?qū)儆谄涞暮桨嗥钡逆湵恚涔?jié)點信息設(shè)計如下圖:
?

?
航班鏈表使用的是雙向循環(huán)鏈表,其節(jié)點信息設(shè)計如下圖:
?

?
航班使用的是單向循環(huán)鏈表,其節(jié)點信息設(shè)計如下圖:
?

?
2.客戶端與服務(wù)端的數(shù)據(jù)交換
客戶端與服務(wù)端的數(shù)據(jù)交換結(jié)構(gòu)是由一個結(jié)構(gòu)體,里面定義了一個無符號整型(unsigned int ),其代表的是一個功能標(biāo)志位,還定義了一個共用體(union ?service_data),其代表的是客戶端與服務(wù)端的交換數(shù)據(jù)。其設(shè)計如下圖:
?

功能標(biāo)志位設(shè)置如下:




3.服務(wù)端多路IO復(fù)用select模型
服務(wù)端的select負(fù)責(zé)監(jiān)聽服務(wù)端的監(jiān)聽套接字以及客戶端的已連接套接字。若用戶開始運行客戶端,則服務(wù)端的監(jiān)聽套接字會有響應(yīng),此時select監(jiān)聽到監(jiān)聽套接字有數(shù)據(jù),就立即返回,然后判斷監(jiān)聽套接字是否還在監(jiān)聽的文件描述符集合中,若在,則將已連接套接字保存到一個專門存放已連接套接字的數(shù)組connfd_buf。
若用戶開始發(fā)送數(shù)據(jù),則服務(wù)端的已連接套接字會有響應(yīng),此時select監(jiān)聽到已連接套接字有響應(yīng),此時select會立即返回,然后判斷數(shù)組connfd_buf中哪一個已連接套接字connfd發(fā)送數(shù)據(jù),然后,喚醒線程池中的一個線程去處理該用戶的所發(fā)過來的數(shù)據(jù)。
?




?源碼地址:??https://gitee.com/bodhi-cloud/qt-open-code.git
謝謝閱讀,點個贊唄。


?
?
?
?
?
?