基于嵌入式系統(tǒng)的web_server的方法
【技術(shù)領(lǐng)域】
[0001]基于嵌入式系統(tǒng)的web_server的方法主要涉及計(jì)算機(jī)系統(tǒng)方面領(lǐng)域。
【背景技術(shù)】
[0002]隨著微電子技術(shù)、計(jì)算機(jī)技術(shù)的飛速發(fā)展,嵌入式系統(tǒng)得到廣泛的應(yīng)用。由于嵌入式系統(tǒng)具有體積小、功耗低、功能強(qiáng)等特點(diǎn),嵌入式系統(tǒng)己廣泛地應(yīng)用于工業(yè)控制系統(tǒng)、信息家電、通訊設(shè)備、醫(yī)療儀器、軍事設(shè)備等眾多領(lǐng)域,人們?nèi)粘I詈凸ぷ髦薪佑|的儀器和設(shè)備中,大都嵌入了高效的微處理器。它們中的大多數(shù)還游離于Internet之外,但隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和應(yīng)用,越來越多的嵌入式設(shè)備要求內(nèi)嵌Web服務(wù)器,以便通過Internet網(wǎng)絡(luò)對它們進(jìn)行訪問,實(shí)現(xiàn)遠(yuǎn)程控制和信息共享的目的。
[0003]
【發(fā)明內(nèi)容】
通過國家專利檢索沒有發(fā)現(xiàn)關(guān)于此系統(tǒng)方面的申請資料。
[0004]此方法主要是選擇實(shí)現(xiàn)一個(gè)支持CGI的非常適合于嵌入式系統(tǒng)的Boa WebServer0
[0005]Bo a是一個(gè)單任務(wù)的HTTP服務(wù)器,源代碼開放、性能高,它最初的設(shè)計(jì)目標(biāo)是提供快速的安全的HTTP服務(wù)器。它的關(guān)鍵程序是:
(I)建立套接口 ser ver So cket=socket (A F INETj SO CK STREAM, 0); if (serverSocket==-l)
{printf(〃 In vaildso cket\n〃);exit (I);
}o
[0006](2)將套接口連接到HTTP服務(wù)默認(rèn)端口 80//填寫結(jié)構(gòu)sockaddr in和域。
[0007]serverAddrsi n_f amiIy=AF INET;serverAddrsi n_port=htons(port);serverAddrsi n-ad dr.s_addr=htonl(INADDR—ANY);memset(&(serverAddrsin_zero), 0,8);
//將套接口與端口聯(lián)系在一起
rc=bind(serverSocket, (structso ckaddr^feserverAddrsi zeof (structsockaddr)) ;//bind 操作失敗if (rc==_l)
{
prin tf ( Bad bind\n〃);exit (I);
}o
[0008](3)監(jiān)聽套接口 //開始監(jiān)聽端口上的套按口連接,隊(duì)列長度設(shè)為10 rc=listen(serverSocket, 10) ;// 監(jiān)聽操作失敗if (r c=-l)
{
prin tf ( 〃Ba dli sten\n〃);exi t (I );
}o
[0009](4)接收客戶端的連接請求; while (I)//等待客戶連接
die ntA dd rSize=sizeof (struct sockaddr_in)do
{soc k=accept (serverSocket, (struct sockaddr*)&clientAddr,
&cilentAddrSize);
}
while ((sock==-l) &&(errno==EINTR)) V/ 連接失敗if (s ock ==-1)
{
prin tf ( 〃Bada ccept\n〃);exi t (I );
}o
[0010](5)接收客戶端數(shù)據(jù); i=recv (sock.recvBufer, 4000,0);
刀讀取失敗
if(i =- D
ber ak ;
(6)向客戶端發(fā)送數(shù)據(jù) //標(biāo)識傳送字節(jié)數(shù) totalSen t=0;
//循環(huán)發(fā)送每個(gè)字節(jié) do {
bytesSent=sent(sock, cbuf+totalSent, strlen(cbuf+totalSent),0);
if ( bytesSen t==-1)
break;
totalSent+=byte sSent;
}
while (totalSent〈size);
具體操作是在uC Iin ux下實(shí)現(xiàn)Boa,需要對Boa做一些配置和修改。這主要通過對boaesco uf和mime, types文件進(jìn)行修改來實(shí)現(xiàn),需要改動(dòng)的配置有以下幾項(xiàng):
(I)建目錄:
由于u cl inux默認(rèn)的根文件系統(tǒng)romfs是只讀的,不能用mkdir等命令來新建目錄,故應(yīng)在編譯內(nèi)核前先建好要用到的目錄,這通過修改makefile文件來實(shí)現(xiàn)。在ROMFSeDIRS=bin dev etc home lib unit pros usr var 的后邊增力口 home/web home/web/cg1-bin,這樣修改后編譯內(nèi)核,編譯好的根文件系統(tǒng)romfs中就包含這些目錄了。
[0011](2)指定W eb服務(wù)器的根目錄路徑進(jìn)入/ ucl inux-dis/tuser/boa/src/目錄,通過修改 defme.h 文件中 #defineE RVER_R00T 〃/home〃語句來指定 SERVER ROOT。另夕卜,還可以通過命令行來指定,例如:boa-c/home/&。而且命令行指定的SERVER ROOT可以覆蓋defme.h文件
所指定的。
[0012](3)修改 b oa.conf 文件在 bo a.co nf 里修改:
將 use ro b odyG roupO g roup 改為 U se r0 G roupO。
[0013]默認(rèn)首頁和CGI程序所在目錄,即Di rec to ryindexi ndex.htnil
Scr ipt Al ias/cgi_bin//h ome/web/cg1-bin/這樣指定后,index, htm為遠(yuǎn)程瀏覽客戶訪問WebS erver所看到的首頁默認(rèn)值,用C編寫的CGI程序編譯成二進(jìn)制文件,放到/cg1-bin/目錄下,CGI程序能被正確地執(zhí)行。
[0014]Bo a.c onf文件和mime卻pes文件必須放到Web服務(wù)器根目錄下,所以把修改后的 ba0.conf 和 mime, types 拷貝到“./uclinux_dist/romfs/home/〃 目錄下.為了讓 Boa做作為一種服務(wù)啟動(dòng),這需要更改inittab文件,在:inetunknown./bin/inetd后添加如下行:boa:unknown:/bin/boac/home.配置過程后,重新編譯內(nèi)核,編譯時(shí)選中Boa選項(xiàng)。把編譯好的內(nèi)核下載到硬件,啟動(dòng)UClinux,完成IP配置,啟動(dòng)Boa Web Server,這樣就可以通過EE訪CGI網(wǎng)頁了。如果想啟動(dòng)uClinux時(shí)自動(dòng)啟動(dòng)Boa Web Server,可以修改rc文件。
[0015]修改后重新編譯內(nèi)核,再下載到開發(fā)板運(yùn)行。運(yùn)行uclinux后,不需要配置就可以直接通過正來訪問網(wǎng)頁了。
【主權(quán)項(xiàng)】
1.基于嵌入式系統(tǒng)的web—server的方法其主要是通過其建立套接口、將套接口連接到HTTP服務(wù)默認(rèn)端口 80、監(jiān)聽套接口、接收客戶端的連接請求、接收客戶端數(shù)據(jù)完成、向客戶端發(fā)送數(shù)據(jù)。2.根據(jù)權(quán)利要求1中的建立套接口其代碼是server So cket=socket (A F INETj SOCK STREAM, 0);if (serverSocket== — I){printf(〃 In vaildso cket\n〃);exit (I); }o3.根據(jù)權(quán)利要求1中的將套接口連接到HTTP服務(wù)默認(rèn)端口80其代碼是:serverAddrsi n_f amiIy=AF INET;serverAddrsi n_port=htons(port);serverAddrsi n-ad dr.s_addr=htonl(INADDR—ANY);memset(&(serverAddrsin_zero), 0,8); rc=bind(serverSocket, (structso ckaddr〃&serverAddrsi zeof (structsockaddr);if (serverSocket== — I){printf C bad bind\n〃);exit (I); }o4.根據(jù)權(quán)利要求1中監(jiān)聽套接口其代碼:rc=listen(serverSocket,10)。5.根據(jù)權(quán)利要求1中接收客戶端的連接請求其代碼 while (I)die ntA dd rSize=sizeof (struct sockaddr_in)do{soc k=accept (serverSocket, (struct sockaddr*)&clientAddr,&cilentAddrSize); }while ((sock==-l)&&(errno==EINTR)if (sock == -1) {prin tf ( 〃Bada ccept\n〃);exi t (I ); }o6.根據(jù)權(quán)利要求1中接收客戶端數(shù)據(jù)完成其代碼表現(xiàn):i=reCV(Sock.recvBufer, 4000,0);if (i =-1) berako7.根據(jù)權(quán)利要求1中向客戶端發(fā)送數(shù)據(jù)其代碼表現(xiàn):totalSent=0; do {byt esS en t=s en t (sock,cbuf+totalSent,strlen(cbuf+totalSent),0);if ( bytesSent==-l)break;totalSent+=bytesSent;}while (totalSent<size)。
【專利摘要】基于嵌入式系統(tǒng)的web_server的方法主是嵌入式WebServer正是為了彌補(bǔ)傳統(tǒng)服務(wù)器的不足,不同于傳統(tǒng)的WebServer,它具有簡單,廉價(jià),功能完善和通用性強(qiáng)等特點(diǎn),它能夠提供遠(yuǎn)程用戶訪問和并對現(xiàn)場進(jìn)行控制,能在遠(yuǎn)程監(jiān)控,智能家電和資源共享等多種場合得到應(yīng)用。
【IPC分類】G06F9/44
【公開號】CN105630464
【申請?zhí)枴緾N201410595880
【發(fā)明人】陳偉男
【申請人】鎮(zhèn)江華揚(yáng)信息科技有限公司
【公開日】2016年6月1日
【申請日】2014年10月30日