點(diǎn)贊+關(guān)注,功德無量。更多配套資料,歡迎私信。
百度網(wǎng)盤 請(qǐng)輸入提取碼百度網(wǎng)盤為您提供文件的網(wǎng)絡(luò)備份、同步和分享服務(wù)??臻g大、速度快、安全穩(wěn)固,支持教育網(wǎng)加速,支持手機(jī)端。注冊(cè)使用百度網(wǎng)盤即可享受免費(fèi)存儲(chǔ)空間https://pan.baidu.com/s/1F6BR6uTANKKcNnoaCUAZYA?pwd=1688
上午:WebServer編程????
下午:BOA介紹及其移植
教學(xué)內(nèi)容:
1、WebServer編程:
利用IE鏈接服務(wù)器的時(shí)候,會(huì)發(fā)送一個(gè)報(bào)文,報(bào)文格式如下:
其中GET是握手,index.html是打開文件名 HTTP/1.1是協(xié)議名
對(duì)于網(wǎng)絡(luò)webserver,主要是利用,在linux虛擬機(jī)下,
創(chuàng)建一個(gè)TCP主機(jī)服務(wù)器;
?????? 1)、當(dāng)有客戶端(IE)鏈接的時(shí)候,服務(wù)器響應(yīng)。
?????? 2)、主程序在鏈接成功后,在創(chuàng)建線程或者進(jìn)程去處理鏈接的隊(duì)列,同時(shí)服務(wù)器返回到accept狀態(tài)繼續(xù)下一個(gè)鏈接。(如果創(chuàng)建的是線程,必須使用線程函數(shù))
?????? 3)、線程或進(jìn)程中的處理函數(shù),主要解決通過接收的頭文,解出文件名,如果不存在,發(fā)送不存在的頭文;存在就發(fā)送成功的頭文同時(shí)read文件內(nèi)容,通過套接字發(fā)送過去(發(fā)送給IE)
---------------------------
成功頭文:
------------
--------------------------
---------------------------
失敗頭文:
------------
--------------------------
2、BOA 服務(wù)器
?????? 是一個(gè)小巧高效的web服務(wù)器,是一個(gè)運(yùn)行于unix或linux下的,支持CGI的、適合于嵌入式系統(tǒng)的單任務(wù)的http服務(wù)器,源代碼開放、性能高。 Boa 是一種非常小巧的Web服務(wù)器,其可執(zhí)行代碼只有大約60KB左右。作為一種單任務(wù)Web服務(wù)器,Boa只能依次完成用戶的請(qǐng)求,而不會(huì)fork出新的進(jìn)程來處理并發(fā)連接請(qǐng)求。但Boa支持CGI,能夠?yàn)?/span>CGI程序fork出一個(gè)進(jìn)程來執(zhí)行。Boa的設(shè)計(jì)目標(biāo)是速度和安全。
3、boa服務(wù)器在虛擬機(jī)的移植
一> 編譯boa 程序
1. www.boa.org 下載boa-0.94.13-src.tar.gz
2. tar zxvf boa-0.94.13-src.tar.gz 解壓
3. cd boa-0.94.13-src
4. cd ./src
5. ./configure
6. make
二> 修改配置文件boa.conf
0. 編譯完成之后cd .. 返回boa-0.94.13-src 目錄
1. 建立/etc/boa 目錄, 并復(fù)制boa.conf 到/etc/boa 目錄下
mkdir /etc/boa
cp boa.conf /etc/boa
2. 進(jìn)入/etc/boa 目錄打開并修改其中的boa.conf 文件
cd /etc/boa
vi boa.conf
以下操作均對(duì)/etc/boa 下的boa.conf 進(jìn)行
3. 修改User nobody 為User 0 ; 修改Group nogroup 為Group 0
4. 修改ErrorLog 選項(xiàng)和AccessLog 選項(xiàng)為:
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
5. 設(shè)置html 文件目錄: DocumentRoot /var/www
6. 設(shè)置默認(rèn)首頁: DirectoryIndex index.html
7. 設(shè)置ScriptAlias 選項(xiàng)為:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
三> 根據(jù)第二步設(shè)置建立相關(guān)文件夾并放入文件:
1. 根據(jù)(第二.4 步)的設(shè)置建立/var/log/boa 文件夾和相應(yīng)文件:
mkdir /var/log/boa
touch /var/log/boa/access_log
touch /var/log/boa/error_log
2. 根據(jù)(第二.5 步)的設(shè)置建立/var/www 文件夾(如果存在此文件則不用創(chuàng)建), 并在
此目錄下存放html 文件(包括index.html 文件)。
3. 根據(jù)(第二.7 步)的設(shè)置建立/var/www/cgi-bin 文件夾
四> OK,在編寫boa-0.94.13-src/src 文件夾下運(yùn)行./boa 程序,啟動(dòng)boa 服務(wù)器。
在windows 下通過http://192.168.222.66(此IP 為虛擬機(jī)的IP 地址)這種形式
訪問,進(jìn)行測試。
4、boa移植在開發(fā)板上
1>. (第一.3 步)操作完成之后,修改Makefile 文件:
將:
CC = gcc
CPP = gcc -E
該為:
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
make 即可。
2>. 拷貝PC 上/etc/mime.types 文件到開發(fā)板/etc 目錄下
或者將boa.conf 文件中
MimeTypes /etc/mime.types
修改為:
MimeTypes /dev/null
boa 配置相關(guān)目錄:
1. boa.conf 的存放目錄:
默認(rèn)boa.conf 是在/etc/boa.conf 目錄的, boa 運(yùn)行時(shí)會(huì)自動(dòng)去找
/etc/bon.conf 目錄。
這個(gè)設(shè)定是在define.h 文件中定義的,可在編譯之前進(jìn)行修改。
2. log 目錄: 分為Errorlog 和AccessLog 兩個(gè)目錄,可在boa.conf 中修改。
如:
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
3. html 文件存放目錄, 可在boa.conf 文件中修改。
如: DocumentRoot /var/www
4. cgi 腳本存放目錄, 可在boa.conf 文件中修改。
如: ScriptAlias /cgi-bin/ /var/www/cgi-bin
5. mime.types 存放目錄, 可在boa.conf 文件中修改。
如: MimeTypes /etc/mime.types
5、字節(jié)序
字節(jié)序是一個(gè)處理器的架構(gòu)特性
小端格式:將低位字節(jié)數(shù)據(jù)存儲(chǔ)在低地址
大端格式:將高位字節(jié)數(shù)據(jù)存儲(chǔ)在低地址
網(wǎng)絡(luò)協(xié)議指定了通訊字節(jié)序--大端
字節(jié)序轉(zhuǎn)換函數(shù):
uint32_t htonl(uint32_t hostint32);
uint16_t htons(uint16_t hostint16);
以上返回網(wǎng)絡(luò)字節(jié)序
uint32_t ntohl(uint32_t netint32);
uint16_t ntohs(uint16_t netint16);
以上返回主機(jī)字節(jié)序
#include <arpa/inet.h>
以上都是無符號(hào)整型之間的轉(zhuǎn)換,即大端和小端之間的轉(zhuǎn)換。
6、到點(diǎn)分十進(jìn)制數(shù)串:
在網(wǎng)絡(luò)傳輸中,IP是以一個(gè)32位無符號(hào)整型傳輸,而實(shí)際的IP以字符型表示,比如:192.168.222.66;
int inet_pton(int family, const char *strptr,void *addrptr);
family:什么協(xié)議,是inet就是AF_INET;
strptr:存IP的字符地址或指針
addrptr:字符長度的指針
??成功返回1,否則返回0
const char *inet_ntop(int family,const void *addrptr,char *strptr,size_t len);
family:什么協(xié)議,是inet就是AF_INET;
addrptr:存網(wǎng)絡(luò)(是無符號(hào)整型,一般是結(jié)構(gòu)體中的&client_addr.sin_addr)IP的地址
strptr:存IP的字符地址或指針
len:存字符長度
#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46 //for ipv6
7、TCP通信的過程
TCP的通信是在三次握手協(xié)議之后,服務(wù)器必須經(jīng)過創(chuàng)建套接字、綁定套接字、監(jiān)聽套接字和接受套接字幾個(gè)步驟。
對(duì)于通信雙方可以使用系統(tǒng)調(diào)用read和write;也可以使用send和recv
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf,size_t nbytes, int flags);
ssize_t recv(int sockfd, void *buf,size_t nbytes, int flags);
返回讀到或?qū)懙降淖止?jié)數(shù)
sockfd:聯(lián)絡(luò)的套接字
buf:發(fā)送(存儲(chǔ))的緩存數(shù)據(jù)地址
nbytes:發(fā)送(存儲(chǔ))字節(jié)大小
flags:阻塞還是不阻塞等宏作用,一般為0阻塞
8、關(guān)閉套接字
對(duì)于TCP通信來說,要先關(guān)閉客戶端才能關(guān)閉服務(wù)器文章來源:http://www.zghlxwxcb.cn/news/detail-800967.html
關(guān)閉使用close()函數(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-800967.html
到了這里,關(guān)于嵌入式培訓(xùn)機(jī)構(gòu)四個(gè)月實(shí)訓(xùn)課程筆記(完整版)-Linux網(wǎng)絡(luò)編程第二天-TCP編程(物聯(lián)技術(shù)666)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!