<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM7的嵌入式Web服務(wù)器設(shè)計(jì)技術(shù)

          ARM7的嵌入式Web服務(wù)器設(shè)計(jì)技術(shù)

          作者: 時(shí)間:2010-09-30 來源:網(wǎng)絡(luò) 收藏

          3.2 對(duì)動(dòng)態(tài)內(nèi)容和動(dòng)態(tài)表單的實(shí)現(xiàn)
          先編寫一個(gè)包含DATA x>動(dòng)態(tài)標(biāo)志和表單的HTML文件,再分別編寫動(dòng)態(tài)內(nèi)容處理功能函數(shù)和表單分析處理函數(shù)。在建立HTTP服務(wù)器套接字之前,需要先安裝好自己句柄,將網(wǎng)頁中的動(dòng)態(tài)標(biāo)識(shí)與其對(duì)應(yīng)的動(dòng)態(tài)內(nèi)容處理功能函數(shù),以及表單標(biāo)識(shí)與表單分析處理函數(shù)相關(guān)聯(lián)。圖2中的動(dòng)態(tài)內(nèi)容/句柄API就是用來提供變量名/表單名與用戶定義功能之間的聯(lián)系。
          動(dòng)態(tài)內(nèi)容安裝句柄:
          addDynamicContent(“temperature”,&getTemper);
          表單安裝句柄:
          addDynamicHandler(/control,&myHandler);
          其中,temperature和/control分別為網(wǎng)頁中的動(dòng)態(tài)內(nèi)容標(biāo)識(shí)和表單標(biāo)識(shí),getTemper和myHandler分別為動(dòng)態(tài)內(nèi)容處理功能函數(shù)和表單分析處理函數(shù)。
          這樣,每當(dāng)有GET請(qǐng)求時(shí),動(dòng)態(tài)內(nèi)容處理功能函數(shù)的返回值將替代動(dòng)態(tài)標(biāo)志的值嵌入到內(nèi)容流中。每當(dāng)有POST請(qǐng)求時(shí),表單分析處理函數(shù)調(diào)用parseVarialbe功能,簡單地在內(nèi)容中查找變量名。一旦發(fā)現(xiàn),這個(gè)值便被復(fù)制到用戶緩沖器中,直到發(fā)現(xiàn)分界符“&”。POST構(gòu)造一個(gè)包括報(bào)體的HTTP請(qǐng)求報(bào)文,發(fā)送給Web服務(wù)器。該報(bào)文按照鍵值對(duì)其進(jìn)行組裝,使用符號(hào)“&”分隔。
          3.3 Web服務(wù)器主程序
          Web服務(wù)器主程序流程如圖3所示。本設(shè)計(jì)中使用的Web服務(wù)器套接字是典型的TCP流套接字。通過socket()創(chuàng)建一個(gè)套接字,使用bind()將該套接字綁定在80端口上,通過listen()設(shè)定監(jiān)聽的連接數(shù),最后調(diào)用accept()等待Web客戶機(jī)的連接請(qǐng)求。一個(gè)套接字支持一個(gè)請(qǐng)求,不能支持永久型連接。當(dāng)服務(wù)器接收到一個(gè)連接時(shí),功能函數(shù)handleConnection()對(duì)用戶請(qǐng)求進(jìn)行解析,根據(jù)返回的內(nèi)容關(guān)閉客戶機(jī)套接字,然后等待另一個(gè)套接字請(qǐng)求。

          本文引用地址:http://www.ex-cimer.com/article/151465.htm

          3c.JPG


          對(duì)handleConneetion()功能函數(shù)(請(qǐng)求報(bào)文分析程序)分析如下:
          ①在HTTP請(qǐng)求報(bào)文中進(jìn)行讀操作,從該套接字循環(huán)讀取,直到滿足以下兩個(gè)條件之一:查找到Content_Length報(bào)頭,確定報(bào)文報(bào)體大??;請(qǐng)求若為post方法,簡單地查找+QUERY文本。
          ②處理HTTP請(qǐng)求類型。對(duì)請(qǐng)求報(bào)文的第一個(gè)令牌進(jìn)行識(shí)別。如果為GET請(qǐng)求,則從中分析請(qǐng)求的文件名,使用lookupFilename()功能函數(shù)查找該文件名,若沒有則發(fā)送適當(dāng)?shù)臓顟B(tài)碼給請(qǐng)求者,若有則調(diào)用returnFile原語通過套接字來發(fā)送請(qǐng)求文件。如果為HTTP POST請(qǐng)求,則再次分析文件名,然后通過call Dynamic Handle功能函數(shù)調(diào)用一個(gè)用戶定義的功能處理請(qǐng)求。若既非GET請(qǐng)求,也非POST請(qǐng)求,則返回狀態(tài)碼“not implemented”。

          4 應(yīng)用程序文件系統(tǒng)的構(gòu)造
          本設(shè)計(jì)使用一個(gè)特殊的buildfs應(yīng)用程序?qū)⒕W(wǎng)頁文件編譯為順序的數(shù)據(jù)結(jié)構(gòu),它將網(wǎng)頁文件所在的目錄路徑作為變量,將這個(gè)變量作為內(nèi)容樹的根。遍歷內(nèi)容樹,將遇到的每個(gè)文件累計(jì)到應(yīng)用程序文件系統(tǒng)結(jié)構(gòu)中,并寫入文件filedata.c。文件filedata.c作為工程文件的一部分,一同被編譯、下載到硬件上。buildfs生成的應(yīng)用程序文件系統(tǒng)結(jié)構(gòu)如表1所列。當(dāng)定位一個(gè)文件時(shí),只需找到文件報(bào)頭,將文件項(xiàng)目的文件名和源文件名進(jìn)行比較。若文件匹配,則可將后來檢索的元素調(diào)出。

          3d.JPG

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


          關(guān)鍵詞: 嵌入式

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();