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