基于uIP與AJAX的動(dòng)態(tài)Web服務(wù)器設(shè)計(jì)
而uIP為底層系統(tǒng)提供了4個(gè)接口函數(shù):uip_init()完成協(xié)議棧的初始化;uip_input()用于處理從以太網(wǎng)接收到的IP數(shù)據(jù)包;uip_perio dic()用于協(xié)議內(nèi)核周期性地對(duì)各TCP連接的輪詢;uip_udp_periodic()則用于UDP服務(wù)下對(duì)各UDP連接的輪詢。其中,uip_input()和uip_per iodic()在協(xié)議的內(nèi)部采用同一個(gè)函數(shù)void uip_process(u8_t flag)實(shí)現(xiàn),區(qū)別在于調(diào)用的參數(shù)不同。uIP主程序清晰地展示了各接口函數(shù)的調(diào)用方法,其主程序流程圖如圖2所示。本文引用地址:http://www.ex-cimer.com/article/148264.htm
uIP的各處理程序會(huì)調(diào)用UIP_APPCALL()進(jìn)行應(yīng)用程序處理,用戶需要將UIP_APPCALL宏定義為實(shí)際的應(yīng)用函數(shù)名,應(yīng)用程序就可以掛接到uIP中,而uip_flags是協(xié)議棧提供給應(yīng)用層查詢的狀態(tài)變量。
2 動(dòng)態(tài)Web服務(wù)器的實(shí)現(xiàn)
在uIP中已經(jīng)提供了webserver的應(yīng)用實(shí)例,用戶可以參考它并根據(jù)自己的需求進(jìn)行設(shè)計(jì)。為了實(shí)現(xiàn)瀏覽器與服務(wù)器之間的交互性,本文采用了CGI動(dòng)態(tài)Web技術(shù)。CGI(Common Gateway Interface)是Web服務(wù)器與外部擴(kuò)展應(yīng)用程序交互的一種標(biāo)準(zhǔn)接口。目前,服務(wù)器端的動(dòng)態(tài)Web技術(shù)除CGI外,還有ASP、PHP、JSP等解決方案,但它們或者是針對(duì)某種語(yǔ)言的,或者是依賴于特定的操作系統(tǒng)或商業(yè)軟件,只有CGI技術(shù)適用于資源有限、編程語(yǔ)言受限的嵌入式Web服務(wù)器。設(shè)計(jì)的Web服務(wù)器的結(jié)構(gòu)如圖3所示。
在系統(tǒng)初始化后Web服務(wù)器開始監(jiān)聽80端口,一旦有客戶端請(qǐng)求連接,uIP就為其分配一個(gè)連接項(xiàng)。服務(wù)器在收到HTTP請(qǐng)求后,首先依據(jù)請(qǐng)求文件的類型來判斷該請(qǐng)求是動(dòng)態(tài)請(qǐng)求還是靜態(tài)請(qǐng)求,如果請(qǐng)求的是HTML類型的文件則為靜態(tài)請(qǐng)求;如果請(qǐng)求的是shtml類型的則為動(dòng)態(tài)請(qǐng)求。
對(duì)于靜態(tài)請(qǐng)求,服務(wù)器會(huì)直接查詢其文件系統(tǒng)是否存在該網(wǎng)頁(yè),如果存在就響應(yīng)客戶端的請(qǐng)求;如果不存在就響應(yīng)404請(qǐng)求錯(cuò)誤網(wǎng)頁(yè)。為了減少存儲(chǔ)資源的使用,uIP沒有一般的文件系統(tǒng),而是將所有靜態(tài)網(wǎng)頁(yè)存儲(chǔ)為常量數(shù)組,并將這些數(shù)組串聯(lián)成一個(gè)文件鏈表,采用輪詢的方式按照網(wǎng)頁(yè)名稱進(jìn)行查詢。
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
評(píng)論