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