Android上如何搭建web伺服器?

你說的應該是http伺服器吧?

我們採用的方案是nanohttp開源組件來實現的。

組件本身提供了一個SimpleWebService,用於提供文件下載能力:

也就是你可以在Pc上下載你手機上的文件。

你可以基於這個類進行相應的修改。

> 圖片來自百度圖片,侵刪

![](http://h.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=6b7043c5adc27d1ea57333c02ee58158/e61190ef76c6a7ef71545947f4faaf51f3de6665.jpg)

***

講解一下它的主要原理:

### 1 基於socket,socketservice進行編程;

創建服務端socket的時候需要一個埠和ip地址。

假定我們的服務運行於wifi環境下,那麼採用以下方法來獲取ip地址。

```java

WifiManager wm = (WifiManager) context.getSystemService(WIFI_SERVICE);

DhcpInfo di = wm.getDhcpInfo();

long getewayIpL = di.ipAddress;

```

### 2 解析http請求,處理,並發送應答。

從ServerSocket.accpet獲得Socket.

Socket.getInputStream();從而獲取輸入流。

通過將輸入流過濾和包裝,讀取內容到內存數組中,然後利用Reader讀取數組(通過ByteArrayInputStream)。

利用Reader的token讀取能力,將數據分解為頭域和實體部分。

交給解析器(自己編寫)

然後得到需要填充到應答報文的數據,

發送應答。

***

可以用於做什麼:

### 1 簡單的web伺服器

例如展示一些簡單的靜態網頁,當然也可以結合資源下載器來提供js,css的下載,共同組建一個動態的web頁面。

當然,由於js,css的地址和你伺服器的ip地址和埠有關。並且沒有域名和DNS,所以你只能在生成html文件的時候動態的去生成這一部分內容。

### 2 Json內容提供器

可直接在該伺服器上為特定的url,配置一個應答,應答中包含Json數據。

這有利於客戶端快速開發功能。因為服務端同學可能有自己的排期,而客戶端可能需要驗證一些功能,但是這個時候服務端還沒有開發完成,使用這個小型的內容提供伺服器,能夠很好的解決這個需求。

### 3 內容代理

將收到的內容進行轉發。

可以設置延時,用於測試某些app在網路環境差的情況下的一些表現情況。


推薦閱讀:

TAG:伺服器 | android | Android開發 | Android應用 |