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