青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

常見嵌入式WEB服務(wù)器

嵌入式WEB服務(wù)器常見的有
lighttpd
shttpd
thttpd
boa
mathopd
minihttpd
appweb
goahead
========================================================================
嵌入式WEB服務(wù)器BOA的移植方法(一)2007-2-26 16:20:00
 
隨著Internet技術(shù)的興起,在嵌入式設(shè)備的管理與交互中,基于Web方式的應(yīng)用成為目前的主流,
這種程序結(jié)構(gòu)也就是大家非常熟悉的B/S結(jié)構(gòu),即在 嵌入式設(shè)備上運行一個支持腳本或CGI功能的Web服務(wù)器,
能夠生成動態(tài)頁面,在用戶端只需要通過Web瀏覽器就可以對嵌入式設(shè)備進(jìn)行管理和監(jiān)控,非常方 便實用。
本節(jié)主要介紹這種應(yīng)用的開發(fā)和移植工作。
用戶首先需要在嵌入式設(shè)備上成功移植支持腳本或CGI功能的Web服務(wù)器,然后才能進(jìn)行應(yīng)用程序的開發(fā)。
    1
、 嵌入式Web服務(wù)器移植  由于嵌入式設(shè)備資源一般都比較有限,并且也不需要能同時處理很多用戶的請求,
因此不會使用Linux下最常用的如Apache 等服務(wù)器,而需要使用一些專門為嵌入式設(shè)備設(shè)計的Web服務(wù)器,
這些Web服務(wù)器在存貯空間和運行時所占有的內(nèi)存空間上都會非常適合于嵌入式應(yīng)用場合。
  
典型的嵌入式Web服務(wù)器有Boa
www.boa.org)和thttpd http://www.acme.com/software/thttpd/)等,
它們和Apache等高性能的Web服務(wù)器主要的區(qū)別在于它們一般是單進(jìn)程服務(wù)器,只有在完成一個用戶請求后才能響應(yīng)
另一個用戶的請求,而無法并發(fā)響應(yīng),但這在嵌入式設(shè)備的應(yīng)用場合里已經(jīng)足夠了。
    
我們紹比較常用的Boa服務(wù)器的移植。
     Boa
是一個非常小巧的Web服務(wù)器,可執(zhí)行代碼只有約60KB。它是一個單任務(wù)Web服務(wù)器,只能依次完成用戶的請求,
而不會fork出新的進(jìn)程來處理 并發(fā)連接請求。但Boa支持CGI,能夠為CGI程序fork出一個進(jìn)程來執(zhí)行。Boa的設(shè)計目標(biāo)
是速度和安全,在其站點公布的性能測試中,Boa的性能 要好于Apache服務(wù)器。
   
第一步完成Boa程序的移植。從
www.boa.org下載Boa源碼,當(dāng)前最新版本為0.94.13,將其解壓并進(jìn)入源碼目錄的src
子目錄
    # tar xzf boa-0.94.13.tar.gz
    # cd boa-0.94.13/src
生成Makefile文件
    # ./configure
   
修改Makefile文件,找到CC=gcc,將其改成CC = arm-linux-gcc,再找到CPP = gcc –E,
將其改成CPP = arm-linux-gcc –E,并保存退出。
   
然后運行make進(jìn)行編譯,得到的可執(zhí)行程序為boa,將調(diào)試信息剝?nèi)?,得到的最后程序只有約60KB大小。
    # make
    # arm-linux-strip boa
  
第二步完成Boa的配置,使其能夠支持CGI程序的執(zhí)行。Boa需要在/etc目錄下建立一個boa目錄,里面放入Boa的主要
配置文件boa.conf。在Boa源碼目錄下已有一個示例boa.conf,可以在其基礎(chǔ)上進(jìn)行修改,下面解釋一下該文件的含義:
#
監(jiān)聽的端口號,缺省都是80,一般無需修改
Port 80
# bind
調(diào)用的IP地址,一般注釋掉,表明綁定到INADDR_ANY,通配于服務(wù)器的所有IP地址
#Listen 192.68.0.5
#
作為哪個用戶運行,即它擁有該用戶的權(quán)限,一般都是nobody,需要/etc/passwd中有
#nobody
用戶
User nobody
#
作為哪個用戶組運行,即它擁有該用戶組的權(quán)限,一般都是nogroup,需要在/etc/group
#
件中有nogroup
Group nogroup
#
當(dāng)服務(wù)器發(fā)生問題時發(fā)送報警的email地址,目前未用,注釋掉
#ServerAdmin
root@localhost
#
錯誤日志文件。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。如果不需要錯誤日志,
則用#/dev/null。在下面設(shè)置時,注意一定要建立/var/log/boa目錄
ErrorLog /var/log/boa/error_log
#
訪問日志文件。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。如果不需要錯誤日志,
則用#/dev/null或直接注釋掉。在下面設(shè)置時,注意一定要建立/var/log/boa目錄
#AccessLog /var/log/boa/access_log
#
是否使用本地時間。如果沒有注釋掉,則使用本地時間。注釋掉則使用UTC時間
#UseLocaltime
#
是否記錄CGI運行信息,如果沒有注釋掉,則記錄,注釋掉則不記錄
#VerboseCGILogs
#
服務(wù)器名字
ServerName
www.hyesco.com
#
是否啟動虛擬主機(jī)功能,即設(shè)備可以有多個網(wǎng)絡(luò)接口,每個接口都可以擁有一個虛擬的Web
#
務(wù)器。一般注釋掉,即不需要啟動
#VirtualHost
#
非常重要,HTML文檔的主目錄。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。
DocumentRoot /var/www
#
如果收到一個用戶請求的話,在用戶主目錄后再增加的目錄名
UserDir public_html
#HTML
目錄索引的文件名,也是沒有用戶只指明訪問目錄時返回的文件名
DirectoryIndex index.html
#
當(dāng)HTML目錄沒有索引文件時,用戶只指明訪問目錄時,boa會調(diào)用該程序生成索引文件然后
#
返回給用戶,因為該過程比較慢最好不執(zhí)行,可以注釋掉或者給每個HTML目錄加上#DirectoryIndex指明的文件
#DirectoryMaker /usr/lib/boa/boa_indexer
#
如果DirectoryIndex不存在,并且DirectoryMaker被注釋,那么就用Boa自帶的索引
#
生成程序來生成目錄的索引文件并輸出到下面目錄,該目錄必須是Boa能讀寫
# DirectoryCache /var/spool/boa/dircache
#
一個連接所允許的HTTP持續(xù)作用請求最大數(shù)目,注釋或設(shè)為0都將關(guān)閉HTTP持續(xù)作用
KeepAliveMax 1000
#HTTP
持續(xù)作用中服務(wù)器在兩次請求之間等待的時間數(shù),以秒為單位,超時將關(guān)閉連接
KeepAliveTimeout 10
#
指明mime.types文件位置。如果沒有以/開始,則表示從服務(wù)器的根路徑開始??梢宰⑨尩?span lang="EN-US">
#
避免使用mime.types文件,此時需要用AddType在本文件里指明
MimeTypes /etc/mime.types
#
文件擴(kuò)展名沒有或未知的話,使用的缺省MIME類型
DefaultType text/plain
#
提供CGI程序的PATH環(huán)境變量值
CGIPath /bin:/usr/bin:/usr/local/bin
#
將文件擴(kuò)展名和MIME類型關(guān)聯(lián)起來,和mime.types文件作用一樣。如果用mime.types
#
文件,則注釋掉,如果不使用mime.types文件,則必須使用
#AddType application/x-httpd-cgi cgi
#
指明文檔重定向路徑
#Redirect /bar
http://elsewhere/feh/bar
#
為路徑加上別名
Alias /doc /usr/doc
#
非常重要,指明CGI腳本的虛擬路徑對應(yīng)的實際路徑。一般所有的CGI腳本都要放在實際路徑
#
里,用戶訪問執(zhí)行時輸入站點+虛擬路徑+CGI腳本名
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
  
用戶可以根據(jù)自己需要,對boa.conf進(jìn)行修改,但必須要保證其他的輔助文件和設(shè)置必須和boa.conf里的配置相符,
不然Boa就不能正常工作。 在上面的例子中,我們還需要創(chuàng)建日志文件所在目錄/var/log/boa,
創(chuàng)建HTML文檔的主目錄/var/www,將mime.types文件拷貝 到/etc目錄,
創(chuàng)建CGI腳本所在目錄/var/www/cgi-bin/mime.types文件用來指明不同文件擴(kuò)展名對應(yīng)的MIME類型,
一般 可以直接從Linux主機(jī)上拷貝一個,大部分也都是在主機(jī)的/etc目錄下。
===================================================================

 

===================host test=======================================
1.
進(jìn)入 boa-0.94.13/src
 ./configure
 make
2.
etc/下建立boa目錄并將boa.conf拷貝到該目錄下.更改boa.conf
      Group nogroup 
===》Group 0

3. /var/log/下建立boa目錄,該目錄下可以查看boa服務(wù)器的日志

4.其它的一些路徑

默認(rèn)是/var/www下的內(nèi)容可以訪問                       DocumentRoot /var/www
默認(rèn)cgi ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/  cgi可執(zhí)行程序放在 /usr/lib/cgi-bin/目錄下)
 
例子
http://201.201.201.249/cgi-bin/cgi-test.cgi
CGIPath /bin:/usr/bin:/usr/local/bin
 
只有這些目錄下的命令可以被調(diào)用,如果要root的權(quán)限(如ifconfig配置ip)需要加上/sbin

 

 

下面舉個具體點的例子:

首先編譯pass.c,生成pass.cgi,把他放到/usr/lib/cgi-bin/目錄下

接著把pass.html放在/var/www下,當(dāng)然可以按照上面講的,把默認(rèn)訪問的設(shè)置為pass.c

下面就可以打開了。

注意:pass.html對應(yīng)的cgike可執(zhí)行文件是pass.cgi

=====================================================================

cgi例子

=====================================================================

//pass.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char* getcgidata(FILE* fp, char* requestmethod);

int main()

{

       char *input;

       char *req_method;

       char name[64];

       char pass[64];

       int i = 0;

       int j = 0;

      

//     printf("Content-type: text/plain; charset=iso-8859-1\n\n");

       printf("Content-type: text/html\n\n");

       printf("The following is query reuslt:<br><br>");


       req_method = getenv("REQUEST_METHOD");

       input = getcgidata(stdin, req_method);


       //
我們獲取的input字符串可能像如下的形式

       // Username="admin"&Password="aaaaa"

       // 其中"Username=""&Password="都是固定的

       // "admin""aaaaa"都是變化的,也是我們要獲取的

      

       // 前面9個字符是UserName=

       // "UserName=""&"之間的是我們要取出來的用戶名

       for ( i = 9; i < (int)strlen(input); i++ )

       {

              if ( input[i] == '&' )

              {

                     name[j] = '\0';

                     break;

              }                  

              name[j++] = input[i];

       }


       //
前面9個字符 + "&Password="10個字符 + Username的字符數(shù)

       // 是我們不要的,故省略掉,不拷貝

       for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ )

       {

              pass[j++] = input[i];

       }

       pass[j] = '\0';


       printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);

      

       return 0;

}


char* getcgidata(FILE* fp, char* requestmethod)

{

       char* input;

       int len;

       int size = 1024;

       int i = 0;

      

       if (!strcmp(requestmethod, "GET"))

       {

              input = getenv("QUERY_STRING");

              return input;

       }

       else if (!strcmp(requestmethod, "POST"))

       {

              len = atoi(getenv("CONTENT_LENGTH"));

              input = (char*)malloc(sizeof(char)*(size + 1));

             

              if (len == 0)

              {

                     input[0] = '\0';

                     return input;

              }

             

              while(1)

              {

                     input[i] = (char)fgetc(fp);

                     if (i == size)

                     {

                            input[i+1] = '\0';

                            return input;

                     }

                    

                     --len;

                     if (feof(fp) || (!(len)))

                     {

                            i++;

                            input[i] = '\0';

                            return input;

                     }

                     i++;

                    

              }

       }

       return NULL;

}

 

 

/*

*  gcc -o pass.cgi pass.c

*/

//pass.html

<html>
<head><title>
用戶登陸驗證</title></head>
<body>
<form name="form1" action="/cgi-bin/pass.cgi" method="POST">
<table align="center">
    <tr><td align="center" colspan="2"></td></tr>
    <tr>
       <td align="right">
用戶名</td>
       <td><input type="text" name="Username"></td>
    </tr>
    <tr>
       <td align="right">
  </td>
       <td><input type="password" name="Password"></td>
    </tr>
    <tr>
       <td><input type="submit" value="
  "></td>
       <td><input type="reset" value="
  "></td>
    </tr>
</table>
</form>
</body>
</html>

 

posted on 2009-07-13 11:00 肥仔 閱讀(4714) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩一区二区三区四区在线观看 | 国产精品亚洲一区| 欧美高清视频在线播放| 久久野战av| 欧美久久精品午夜青青大伊人| 欧美高潮视频| 欧美视频亚洲视频| 国产日韩欧美一区二区三区四区| 国产一区二区三区久久 | 亚洲先锋成人| 欧美一级二区| 欧美本精品男人aⅴ天堂| 欧美日本在线播放| 国产欧美二区| 亚洲伦理在线免费看| 亚洲一级黄色| 久久亚洲一区二区三区四区| 欧美激情中文不卡| 亚洲视频免费看| 午夜一级在线看亚洲| 免费观看国产成人| 国产精品午夜久久| 亚洲精品久久久久久下一站 | 欧美伦理影院| 国产字幕视频一区二区| 亚洲精品日韩精品| 欧美资源在线| 欧美福利专区| 亚洲综合视频一区| 欧美精品导航| 影音欧美亚洲| 欧美亚洲一区| 99国产精品久久久久久久| 久久精品人人爽| 国产精品成人免费精品自在线观看| 黄色精品在线看| 亚洲欧美日韩一区二区三区在线观看| 欧美成人dvd在线视频| 亚洲自拍电影| 欧美精品一区在线发布| 欧美午夜电影在线观看| 在线日韩av| 欧美在线黄色| 一区二区三区视频免费在线观看 | 欧美大片在线观看| 亚洲影院免费| 国产精品videossex久久发布| 亚洲国产成人av| 久久影院午夜论| 欧美一区二区三区在线观看视频| 欧美亚一区二区| 一区二区三区四区国产| 亚洲国产欧美在线人成| 性久久久久久久久久久久| 欧美亚日韩国产aⅴ精品中极品| 一区二区91| 亚洲美女视频网| 欧美日韩在线播放一区| 亚洲无人区一区| 一区二区三区视频在线看| 欧美日韩亚洲一区二区三区| 一区二区免费看| 99精品欧美一区二区蜜桃免费| 欧美日韩精品久久久| 日韩一区二区精品在线观看| 亚洲国产精品成人综合| 欧美久久久久久| 中日韩高清电影网| 在线综合亚洲| 国产区亚洲区欧美区| 久久久久久久一区二区三区| 久久精品国产免费| 亚洲二区视频| 亚洲日产国产精品| 国产精品扒开腿爽爽爽视频| 欧美一区二区三区另类| 欧美在线视频播放| 亚洲成人自拍视频| 亚洲美女毛片| 国产麻豆精品在线观看| 乱码第一页成人| 欧美精品成人| 欧美在线视频播放| 毛片一区二区三区| 亚洲视频中文字幕| 欧美亚洲一区二区三区| 亚洲国产精品尤物yw在线观看| 亚洲毛片一区| 韩日欧美一区二区三区| 亚洲欧洲一区二区三区久久| 国产精品video| 另类专区欧美制服同性| 欧美日韩国产影片| 久久久综合网站| 欧美精品二区| 久久精品久久综合| 欧美成人在线影院| 香蕉精品999视频一区二区| 久久精彩免费视频| 亚洲一区免费网站| 一区二区三区免费在线观看| 国产精品v欧美精品∨日韩| 99国产精品视频免费观看| 一本久久精品一区二区| 国产真实乱偷精品视频免| 亚洲国产精品久久久| 欧美日韩在线不卡| 久久亚洲一区二区| 国产精品久久久久久妇女6080 | 欧美视频网站| 蜜臀av国产精品久久久久| 欧美日韩三区| 欧美福利视频在线观看| 国产一区二区观看| 亚洲午夜一区二区三区| 夜夜嗨av一区二区三区四季av| 久久久久**毛片大全| 欧美伊人久久久久久午夜久久久久 | 欧美一区二区免费| 欧美日本在线播放| 欧美第一黄色网| 国产一区美女| 亚洲女性裸体视频| 亚洲一区欧美激情| 欧美日韩国产亚洲一区| 亚洲国产乱码最新视频| 亚洲国产精品精华液2区45| 欧美资源在线观看| 久久激情视频| 国产日韩欧美电影在线观看| 亚洲影视中文字幕| 亚洲自拍偷拍网址| 国产精品v片在线观看不卡| 日韩特黄影片| 一区二区三区四区五区视频| 欧美精品在线网站| 亚洲毛片在线| 亚洲在线国产日韩欧美| 国产精品久久中文| 亚洲永久免费精品| 欧美一区二区视频免费观看| 国产精品视频免费观看www| 亚洲一区二区三区涩| 欧美伊人久久| 在线观看日韩一区| 欧美 日韩 国产一区二区在线视频| 欧美成人高清| 99国内精品久久久久久久软件| 欧美美女视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 香蕉久久国产| 国内视频精品| 欧美激情国产日韩精品一区18| 亚洲另类在线视频| 先锋影音久久久| 永久免费视频成人| 久久久久一区二区| 久久中文字幕导航| 亚洲国产欧美日韩另类综合| 一本久道久久综合婷婷鲸鱼| 国产精品二区在线| 先锋影音久久久| 久久综合狠狠| 日韩亚洲国产精品| 国产欧美日韩综合一区在线播放 | 亚洲欧美中文另类| 免费成人高清视频| 亚洲主播在线| 亚洲国产精品视频| 国产精品久久久久久福利一牛影视| 欧美中文字幕在线观看| 亚洲人久久久| 久久九九热免费视频| 亚洲欧洲在线观看| 国产精品五月天| 欧美电影免费观看高清完整版| 亚洲一区二区三区欧美| 亚洲高清在线观看一区| 欧美一区国产一区| 99在线精品视频在线观看| 国产一区成人| 欧美吻胸吃奶大尺度电影| 久久亚洲风情| 午夜激情亚洲| 一区二区国产日产| 亚洲高清视频的网址| 久久久久久久久蜜桃| 亚洲欧美在线看| 亚洲黄色在线观看| 国内精品久久久久久久果冻传媒| 欧美日韩一区二区三区| 免费亚洲电影在线观看| 欧美在线一级va免费观看| 制服丝袜亚洲播放| 亚洲精品欧美日韩专区| 欧美成人乱码一区二区三区| 久久成年人视频| 午夜在线观看欧美| 亚洲制服丝袜在线| 亚洲一区二区伦理|