GoAhead簡介:
GoAhead是一個開源(商業許可)、簡單、輕巧、功能強大、能夠在多個平臺運行的嵌入式Web Server。
html
GoAhead主要特性:
1 很小的內存消耗
2 支持認證功能Digest Access Authentication (DAA)
3 支持安全的通訊,例如SSL(安全的套接字層)
4 支持動態Web頁面,如ASP頁面
5 可使用傳統的C語言編程定製Web頁面裏的HTML標籤
6 支持CGI(公共網關編程接口)
7 嵌入式的Javascript腳本翻譯器
8 獨特的URL分析器
9 它基本上屬於一個HTTP1.0標準的WEB服務器,對一些HTTP1.1的特性如(持久鏈接)也提供了支持。每秒65次connections
10 可執行文件大小、內存使用狀況:內存需求60K,它的WIN CE版本編譯後的大小還不到60k。
linux
goahead源碼(百度雲盤)
連接:https://pan.baidu.com/s/1ux_9k3ixycMFjLsmHRirBQ
提取碼:0gmd
goahead版本:5.1.1
web
交叉編譯:
進入goahead-5.1.1目錄,進行編譯
make CC=工具鏈(如arm-himix200-linux-gcc) ARCH=arm //編譯
make CC=工具鏈(如arm-himix200-linux-gcc) ARCH=arm clean //清除
編譯後,會在build目錄裏生成linux-arm-default文件,裏面有目標文件以及對於的依賴文件。
注:實際是在編譯projects目錄下的Makefile文件:goahead-linux-default.mk,編譯能夠不用傳參的形式,直接在goahead-linux-default.mk裏修改CC工具鏈等參數。
編程
移植:
一、將build的linux-arm-default文件的bin目錄裏的目標文件goahead,依賴的動態庫libgo,安全證書self.crt、self.key、auth.txt、route.txt拷貝到開發部的同一個目錄下
二、運行goahead 如./goahead
瀏覽器
移植可能遇到的問題以及解決方法:
問題1:
goahead: 0: Cannot get host address for host (none): errno 2
goahead: 0: Cannot initialize server. Exiting.
安全
緣由分析:
沒有設置好IP,須要goahead設置IP
服務器
解決措施:
在http.c的setLocalHost函數裏,將這塊代碼
socket
struct hostent *hp; if ((hp = gethostbyname(host)) == NULL) { error("Cannot get host address for host %s: errno %d", host, errno); return -1; } memcpy((char*) &intaddr, (char *) hp->h_addr_list[0], (size_t) hp->h_length); ipaddr = inet_ntoa(intaddr);
屏蔽掉,並添加 ipaddr=「0.0.0.0」;
即如:
函數
/*struct hostent *hp; if ((hp = gethostbyname(host)) == NULL) { error("Cannot get host address for host %s: errno %d", host, errno); return -1; } memcpy((char*) &intaddr, (char *) hp->h_addr_list[0], (size_t) hp->h_length); ipaddr = inet_ntoa(intaddr);*/ ipaddr="0.0.0.0";
**注:**0.0.0.0 表明本機的全部ip地址工具
問題二:
goahead: 0: Cannot bind to address *:80, errno 98
goahead: 0: Unable to open socket on port 80.
緣由分析:
其餘的應用程序在佔用80端口,例如web程序等
解決措施:
kill佔用80端口的進程便可
測試例子:
在瀏覽器上輸入設備ip便可顯示首頁網站
(1)創建網頁文件
網頁文件index.html,其內容:
<html><head><title>index.html</title></head> <body>Hello /index.html</body> <p>Link to reload <a href="index.html">this page</a></p> <p>Link to <a href="/action/logout">log out</a></p> <p>Link to <a href="test.html">test.html</a></p> </html>
(2)設置goaeah網頁html文件的查找路徑
在projects目錄的goahead-linux-default-me.h文件裏修改ME_GOAHEAD_DOCUMENTS爲
#define ME_GOAHEAD_DOCUMENTS "./"
改成當前路徑。
(3)將index.html文件放在與目標文件goahead相同的目錄便可
(4)在網頁上輸入IP運行便可先index.html內容
總結:每次修改源碼內容時,都須要把libgo.so庫更新纔有效,由於goahead把其餘依賴的文件作成了動態庫。
下一章節會講asp與goform、文件下載、cgi的應用