web瀏覽器
瀏覽器是個顯示網頁伺服器或檔案系統內的html檔案,並讓使用者與此些檔案互動的一種軟體。個人電腦上常見的網頁瀏覽器包括internet explorer、firefox、safari。瀏覽器是最經常使用到的客戶端程式。
web伺服器
通俗的講,web服務傳送頁面使得瀏覽器可以瀏覽,它專門處理http請求。
嵌入式伺服器架構
socket程式設計技術
socket介面是tcp/ip網路的api,socket介面定義了許多函式或例程
socket可以支援資料的傳送和接收,它會定義一種稱為套接字的變數,傳送資料時首先建立套接字,然後使用該套接字的sendto等方法對準某個ip/埠進行資料傳送;接收端也首先建立套接字,然後將該套接字繫結到乙個ip/埠上,所有發向此埠的資料會被該套接字的recv等函式讀出。如同讀出檔案中的資料一樣
http協議
http--hyper text transfer protocol,超文字傳輸協議,是一種建立在tcp上的無狀態連線,整個基本的工作流程是客戶端傳送乙個http請求,說明客戶端想要訪問的資源和請求的動作,服務端收到請求之後,服務端開始處理請求,並根據請求做出相應的動作訪問伺服器資源,最後通過傳送http響應把結果返回給客戶端。其中乙個請求的開始到乙個響應的結束稱為事務,當乙個事物結束後還會在服務端新增一條日誌條目
一次完整的http請求需要七個步驟
http報文:
它是http應用程式之間傳送的資料塊。這些資料以一定的文字資訊開頭,這些資訊描述了報文的內容及含義,報頭後跟著資料部分
一次http請求,http會從客戶端流到伺服器,伺服器的工作完成後,報文從伺服器流到客戶端
所有的http報文都可以分為請求報文和響應報文。它們的結構基本相同,只有起始語法些許不同
請求報文:它會向web伺服器請求乙個動作
請求報文的格式:
起始行:
頭部:
主體:
響應報文:它會將請求的結果返回給客戶端。
響應報文的格式:
起始行:
頭部:
主體:
1、方式(method):客戶端希望伺服器對資源執行的動作,是乙個單獨的詞,比如,get、post或head
2、請求url(request-url):要直接與伺服器進行對話,只要請求url是資源的絕對路徑就可以了,伺服器可以假定自己是url的主機/埠
3、版本(version):報文所使用的http版本。其格式:http/《主要版本號》.《次要版本號》
4、狀態碼(status-code):狀態碼是三位數字,描述了請求過程中所發生的情況。每個狀態碼的第一位數字都用於描述狀態的一般類別(比如,「成功」、「出錯」等等)
5、原因短語(reason-phrase):數字狀態碼的可讀版本,包含行終止序列之前的所有文字。原因短語只對人類有意義,因此,儘管響應行http/1.0 200 not ok和http/1.0 200 ok中原因短語的含義不同,但同樣都會被當作成功指示處理
6、頭部(header):可以有零個或多個頭部,每個首部都包含乙個名字,後面跟著乙個冒號(:),然後是乙個可選的空格,接著是乙個值,最後是乙個crlf首部是由乙個空行(crlf)結束的,表示了頭部列表的結束和實體主體部分的開始
7、實體的主體部分(entity-body):實體的主體部分包含乙個由任意資料組成的資料塊,並不是所有的報文都包含實體的主體部分,有時,報文只是以乙個crlf結束。
socket程式設計介面1.socket()函式
int socket(int domain,int type,int protocol);
說明:socket()函式建立乙個套接字
引數:domain 應用程式所在主機使用的通訊協議族
type 建立的套接字型別
protocol 使用的特定協議
2.bind()函式
int bind(int sockfd,struct sockaddr *my_addr,socklen_t addrlen);
引數:sockfd socket返回的檔案描述符
my_addr 指向結構體sockaddr的指標,儲存位址資訊(埠、ip)
addrlen sockaddr的長度
3、connect函式
int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen);
說明:建立套接字連線,成功返回0,否則返回-1
引數:sockfd socket返回的檔案描述符
serv_addr 儲存著連線資訊的結構體sockaddr
addrlen sockaddr的長度
4、listen()函式
int listen(int sockfd,int backlog);
說明:使得乙個程序可以接受其它程序的請求,使其變為伺服器程序
引數:sockfd socket返回到檔案描述符
backlog 允許建立連線的數目
5、accept()函式
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
說明:用於流式套接字的通訊,返回實際傳送的資料的位元組數
引數:sockfd socket返回的檔案描述符
addr 儲存套接字資訊的結構體
addrlen addr的長度
6、send()函式
ssize_t send(int sockfd,const void *msg,size_t len,int flags);
說明:用於流式套接字或資料報套接字的通訊,返回實際傳送的資料的位元組數
引數:sockfd 傳送資料的套接字描述符
msg 指向傳送資料的指標
len 傳送資料的長度
flags 預設為0
7、recv()函式
ssize_t recv(int sockfd,void *buf,size_t len,int flags);
說明: 用於流式套接字的通訊,返回值為實際讀入緩衝的資料的位元組數
引數:sockfd 要讀的套接字描述符
buf 要讀的訊息的緩衝區
len 緩衝的最大長度
flags 預設為0
apache伺服器的安裝apaches世界排名第一的web伺服器軟體。它可以執行在所有廣泛使用的計算機平台上,由於其跨平台和安全性被廣泛使用。
終端輸入:apt-get install apache2
只需乙個指令,你就能完成apache的安裝,如果你想要進行apache的各種配置,請自行搜尋
安裝之後,apache預設是開啟的且每次會隨系統啟動
終端輸入:apachectl -v檢視apache的版本
當然,你可以在瀏覽器輸入你伺服器的ip位址(安裝伺服器的linux的ip),如果你得到預設介面,那麼一切都是正常的
之後,你就能在/var/www/html/下找到index.html檔案,編輯它,你就能得到你想要的介面
效果如下:
該頁面為仿寫**頁面
嵌入式Web伺服器移植
或者 最新發行版本 0.94.13 解壓 tar xzf boa 0.94.13.tar.gz 直接執行src configure檔案 a 修改 cc gcc 為 cc usr local arm 2.95.3 bin arm linux gcc b 修改 cpp gcc e 為 cpp usr l...
嵌入式Web伺服器移植
文章一僅供個人學習之用,請勿用於他途。n printf n printf n printf n printf n exit 0 交叉編譯生成helloworld.cgi arm softfloat linux gnu gcc o helloworld.cgi helloworld.c 將hellow...
嵌入式web伺服器的實現
1 引言 呼叫 open 開啟裝置,利用 ioctl 對裝置進行控制,比如設定對比度 亮度 調色盤,訪問模式等等。主要 如下 int fd open dev v4l video0 o rdwr 開啟裝置 獲取裝置的基本資訊 裝置名稱 支援的最大最小解析度 訊號源資訊等 ioctl vd fd,vid...