新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Cortex-M3內核處理器的嵌入式Web服務器設計

        基于Cortex-M3內核處理器的嵌入式Web服務器設計

        作者:王鐵流 高嵩 袁海英 李宗方 秦璐璐 北京工業大學電子信息與控制工程學院 時間:2010-03-02 來源:電子產品世界 收藏

          一旦W5100的Socket端口有中斷事件產生時,W5100將通過其中斷引腳INT觸發STM32的外部中斷,使STM32進入外部中斷處理函數改變WInterFlag,程序接著進入處理W5100中斷事件函數,在此函數中,STM32通過訪問W5100的中斷寄存器(IR)和端口0中斷寄存器(S0_IR)判斷出W5100的端口0產生何種中斷事件,若Socket接收到數據,則改變SockRecvFlag。

        本文引用地址:http://www.104case.com/article/106453.htm

          程序檢測到SockRecvFlag發生改變,立即進入處理接收數據函數。處理接收數據函數是整個程序的核心,它主要負責收發數據、解析HTTP協議和響應用戶的不同請求。圖5為該過程的程序流程圖。

          數據處理程序

          HTTP協議是一種請求/響應協議。在基于HTTP的客戶/數據交換時,當HTTP請求產生時,就開始一次HTTP通信。過程如下:瀏覽器提取出URL中的主機后,向DNS發出請求,解析主機名的IP地址;DNS解析地址并將結果返回給瀏覽器;瀏覽器向該地址請求建立TCP連接;瀏覽器發出請求報文;向瀏覽器發送響應報文,并將指定數據發送給瀏覽器;斷開連接。

          根據HTTP協議規定,如果客戶端沒有發出請求,則不會自動發送頁面。因此通過在網頁程序中加入標記,使瀏覽器在無用戶干預下周期性地刷新頁面,從而保證用戶及時地獲得遠程現場的信息。

          HTTP消息包括一個起始行、零個或多個消息頭域、一個標示頭域結束的實體行和一個可能存在的消息體。本程序主要解析消息的起始行,而忽略其它內容,這種處理思路也符合系統硬件對軟件實現的復雜度要求。請求方法決定了對請求URI所指定的資源進行操作的方式,GET方法讀取URL指定的資源,一般用來向服務器傳輸少量且透明的數據,數據總量被限制在255個字符以內,而POST方法可傳輸大量數據,與HTML的表單特性相配合以實現遠程動態交互控制。

          當連接開始時,客戶端發送GET方法請求給服務器,以訪問服務器網頁,為限定特定用戶訪問,增加數據安全性,在網頁中加入基本認證機制。當客戶端請求受基本認證機制保護的網頁時,服務器即要求用戶認證,服務器端對用戶的登陸信息按Base64碼解碼,只有認證成功,瀏覽器才能獲得正確的網頁數據。正確的控制網頁如圖6所示,若用戶信息有誤,服務器返回以狀態碼401為起始行的響應消息。

          由于服務器端檢測的數據處在不停的變化之中,為使網頁的數據也能及時地更新,網頁程序初始化時,要顯示的數據都使用字符串標記暫時表示,在每次發送響應消息到端口前,再將網頁中定義字符串標記用當前設備的實際值替換。

          對LED的控制,網頁程序采用HTML語言的表單,HTTP協議請求方法采用POST。POST作為請求方法時,首先和Web服務器建立連接,成功后瀏覽器將HTML表單中的值發送給Web服務器。這種方式沒有字符長度的限制,表單數據是作為附加的文檔發送而不是作為URL的一部分發送。服務器程序通過判斷客戶的不同控制命令即時做出LED燈的開關響應。

          在每次連接成功后,服務器端程序會返回以狀態碼200開頭的響應消息,消息的起始行為:HTTP/1.1 200 OK。當用戶請求一個服務器端不存在的文件時,服務器返回以狀態碼404開頭的響應消息。

          結語

          這種利用硬件實現TCP/IP協議的網絡芯片W5100及具有Cotex-M3內核的STM32構成Web服務器的方案性價比高。通過網絡,用戶在瀏覽器端可及時收到遠程現場傳感器采集的數據,遠程現場的開關狀態指示燈可實時地響應用戶的開關信號操作請求。測試表明該系統傳輸大塊數據文件的速率可達到100kbit/s。為提高網絡資源的安全性,可采用AES(先進加密標準)等編碼機制來加密必須保護的私有數據。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 余干县| 库伦旗| 陆河县| 孙吴县| 苍梧县| 皋兰县| 潼关县| 洱源县| 苍山县| 黎川县| 东丽区| 织金县| 新郑市| 察哈| 仁怀市| 龙江县| 从化市| 绥芬河市| 白玉县| 庆元县| 安化县| 阜平县| 芜湖市| 鹰潭市| 琼中| 襄垣县| 苍山县| 肥城市| 雷山县| 甘泉县| 两当县| 金塔县| 离岛区| 平山县| 新乐市| 永寿县| 鹿邑县| 德安县| 敦煌市| 宁陵县| 新乐市|