1. 程式人生 > >用微控制器實現 websever 網頁伺服器功能

用微控制器實現 websever 網頁伺服器功能

前言:

1:要實現微控制器實現基礎的網路功能,首先Ping 的通,能夠進行TCP的自收發。此時才能繼續上層開發的websever。 此時分為兩層,底層能夠進行正確的資料交換。 頂層需要做的是對報文的解析和編輯加工。 本人蔘考的是網路模組(W5300 和W5500),以及其例程。 2:首先我們瞭解一下w5500提供 的例程裡面有:         (1)Network install  (2)DHCP   向主機獲取動態IP (3)TCP Server  (4)TCP Client (5)UDP          (6)DNS    暫時不知道怎麼用 (7)SMTP  簡單的郵件傳輸協議 (8)HTTP Server  
(9)HTTP Client (10)Net Bios  區域網內可以使用個API, (11)NTP    同步網路時間的協議   (12)ping 其中感覺有進一步研究價值的,SMTP可以實現向使用者釋出資訊,其實就是一個單片機發郵箱的過程。 HTTPserver配置引數,程式更新。這個最好結合IAP做一個方便控制,易於升級的好程式還是挺好的。 Http/Client 接受電腦端的控制。  之前做過XML控制的從機裝置。         NetBios可以給裝置起個別名,不必在輸入IP.http://bbs.elecfans.com/jishu_470902_1_1.html NTP同步時間。這個沒用過,但是裝置間同步時間應該還是蠻重要的。
3:websever通訊的過程。 HTTP通訊機制是在一次完整的HTTP通訊過程中,Web瀏覽器與Web伺服器之間將完成下列7個步驟:

(1)建立TCP連線

在HTTP工作開始之前,Web瀏覽器首先要通過網路與Web伺服器建立連線,該連線是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網路。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之後才能,才能進行更層協議的連線,因此,首先要建立TCP連線,一般TCP連線的埠號是80

2)Web瀏覽器向Web伺服器傳送請求命令<request-line>


一旦建立了TCP連線,Web瀏覽器就會向Web伺服器傳送請求命令

例如:GET/sample/hello.jsp HTTP/1.1

(3)Web瀏覽器傳送請求頭資訊<headers>

瀏覽器傳送其請求命令之後,還要以頭資訊的形式向Web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行<blank line>來通知伺服器,它已經結束了該頭資訊的傳送

(4)Web伺服器應答

客戶機向伺服器發出請求後,伺服器會客戶機回送應答,HTTP/1.1 200 OK,應答的第一部分是協議的版本號和應答狀態碼

5)Web伺服器傳送應答頭資訊

正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向用戶傳送關於它自己的資料及被請求的文件。

(6)Web伺服器向瀏覽器傳送資料

Web伺服器向瀏覽器傳送頭資訊後,它會發送一個空白行來表示頭資訊的傳送到此為結束,接著,它就以Content-Type應答頭資訊所描述的格式傳送使用者所請求的實際資料

(7)Web伺服器關閉TCP連線

一般情況下,一旦Web伺服器向瀏覽器傳送了請求資料,它就要關閉TCP連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行程式碼Connection:keep-alive

TCP連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。

   4: 如下是HTTP的請求格式:
\r 代表回車,\n代表換行

舉個例項: 請求:
POST /index.html HTTP/1.1
HOST: www.XXX.com
User-Agent: Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0

Username=admin&password=admin
響應:
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<body>
    <p>this is http response</p>
</body>
</html>


請求方法:

(1)GET方法意思是獲取URL指定的資源,這個請求方式是最簡單的也是最常用的。使用GET 方法時,可以將請求引數和對應的值附加在 URI 後面,利用一個問號(“?”)將資源的URI和請求引數隔開,引數之間使用與符號(“&”)隔開,因此傳遞引數長度也受到了限制,而且與隱私相關的資訊也直接暴露在URI中。比如/index.jsp?username=holmofy&password=123123

(2)HEAD 方法與GET用法相同,但沒有響應體,使用場合沒有GET多。比如下載前使用HEAD傳送請求,通過ContentLength響應欄位,來了解網路資源的大小;或者通過LastModified響應欄位來判斷本地快取資源是否要更新。 
(3)PUT:用於向指定資源位置上傳其最新內容(原來沒有就上傳,有就上傳並覆蓋原來的內容) 

GET和POST是最常用的
Request-URI URI 的最常見形式是統一資源定位符 (URL),它也被稱為 Web地址。這種網址是我們經常見到的。
http://example.org/absolute/path/resource.txt
在請求的URI中還有一種相對路徑的,對於這種請求來說在請求頭資訊中一般有Host值來指定伺服器主機。比如:
GET /Test.jsp HTTP/1.1
...
Host:www.example.com
...

Http響應碼

HTTP/1.0 200 OK

這個狀態碼是200,表示請求成功。HTTP協議中狀態碼有三位數字組成,第一位數字定義了響應的類別,有以下五種:

  • 1XX:資訊提示。表示請求已被伺服器接受,但需要繼續處理,範圍為100~101。
  • 2XX:請求成功。伺服器成功處理了請求。範圍為200~206。
  • 3XX:客戶端重定向。重定向狀態碼用於告訴客戶端瀏覽器,它們訪問的資源已被移動,並告訴客戶端新的資源位置。客戶端收到重定向會重新對新資源發起請求。範圍為300~305。
  • 4XX:客戶端資訊錯誤。客戶端可能傳送了伺服器無法處理的東西,比如請求的格式錯誤,或者請求了一個不存在的資源。範圍為400~415。
  • 5XX:伺服器出錯。客戶端傳送了有效的請求,但是伺服器自身出現錯誤,比如Web程式執行出錯。範圍是500~505。

常見的狀態碼務必要熟悉:

200:客戶端請求成功。

302:重定向。

404:請求資源不存在。

400:請求語法錯誤,伺服器無法理解。

403:伺服器收到請求,但拒絕提供服務。

500:伺服器內部錯誤。

503:伺服器當前不能處理客戶端請求,可能需要一段時間後才能恢復正常。

(1)如圖鍵入地址時,要求輸入登陸密碼:
       實現過程: 伺服器:輸入地址和埠傳送到內容為
GET / HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: 192.168.0.101:5000
Connection: Keep-Alive
此時回覆報文為
HTTP/1.1 401 Authorization Required
Server: MySocket Server
WWW-Authenticate: Basic realm=\"MXCHIP 3280\"
Content-Type: text/html
Content-Length: 169
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=ISO-8859-1\">
</HEAD>
<BODY>
<H1>401 Unauthorized.</H1>
</BODY>
</HTML>

這個輸入HTTP的基本認證。用於web瀏覽器或其他客戶端在請求時提供使用者名稱和密碼的登入認證。 輸入:賬戶和密碼後收到的報文
GET / HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: 192.168.0.101:5000
Connection: Keep-Alive
Authorization: Basic YWRtaW46YWRtaW4=
YWRtaW46YWRtaW4=  是admin  admin 經過 base64編碼後 的數值。
常見的報文:
<!DOCTYPE html>
<html>
<title>LOGIN</title> 
<body>
<form method='get' action='Login.cgi'> 
NAME:<input type='text' name='username'><br> 
PASSWORD:<input type='password' name='password'><br> 
<input type='submit' value='LODA'>
</form>
</body>
</html>


突然發現WIZ 官網上竟然有好多資料。下面是一個web的資料, Mark一下。 http://wizwiki.net/wiki/doku.php?id=products:wiz550web:wiz550webgsg_en#basic_demo_web_pages
這世間最難的事情莫過於把事情講清楚吧!