標籤:
Android Http Server
1
引言 Android如何構建Http伺服器呢?本文的小例子,約莫著,還是能做個參考的^^。恩,例子實現的是PC瀏覽手機檔案,支援了下載和刪除。
2
準備 Http協議現今還是RFC2616吧,其基礎的知識還是有必要瞭解的。弄份協議規範書參考,是個不錯的選擇。之後呢,就可以開始了^^。 起初,想自己寫個Http伺服器學習來著,後來懶了==。有興趣的,推薦NanoHTTPD,很小型的僅一個類的http伺服器,不過,只部分支援Http/1.1。當然還有更簡單的實現例子,不過,支援的就更少更單一了。 繼而,還是用了SDK內的HttpService實現的。該部分api源自apache httpcomponents項目中的http core。由於SDK的不同版本,在使用細節上與最新的http core還是有很多小差異的。至於本文例子,是api-8上的實現。
3
建立
Server 建立WebServer,以HttpService實現伺服器。其註冊了3個請求處理,HttpFileHandler、HttpZipHandler、HttpDelHandler。當WebServer每接收一個串連,派發至WorkerThread,新線程處理每個請求。 WebServer部分代碼:
// 建立HTTP請求執行器註冊表 HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry(); // 增加HTTP請求執行器 reqistry.register("*" + SUFFIX_ZIP, new HttpZipHandler(webRoot)); reqistry.register("*" + SUFFIX_DEL, new HttpDelHandler(webRoot)); reqistry.register("*", new HttpFileHandler(webRoot)); // 設定HTTP請求執行器 httpService.setHandlerResolver(reqistry); /* 迴圈接收各用戶端 */ isLoop = true; while (isLoop && !Thread.interrupted()) { // 接收用戶端通訊端 Socket socket = serverSocket.accept(); // 綁定至伺服器端HTTP串連 DefaultHttpServerConnection conn = new DefaultHttpServerConnection(); conn.bind(socket, params); // 派送至WorkerThread處理請求 Thread t = new WorkerThread(httpService, conn); t.setDaemon(true); // 設為守護線程 t.start(); }
4
啟動
Server 建立了個WebService,將WebServer套進去,實現Service方式。介面很簡單,就一個按鈕,啟動如下:
5
訪問
Server 筆記本訪問上述網址唄。 當目錄存在且可讀時才有上述畫面,不然會簡單報個404、403什麼的頁面。當可寫時,增加刪除選項。返迴響應頁面,在HttpFileHandler內處理的。 1)下載 檔案夾:會自動打包成zip下載。其在HttpZipHandler內處理的。 檔案:自動判斷類型,或顯示或下載。沒多做處理,仍就是HttpFileHandler處理的。 2)刪除 會提示是否刪除。確定刪除的話,會等處理結束提示完成,繼而確認自動重新整理。用的jquery impromptu外掛程式,相關css、js在assets/wfs目錄內。CopyUtil提供了複製assets目錄至系統目錄的方法。
6
後記 前段時間開始看其他‘亂糟糟’的東西了。Android的小例子可能不太會再寫了==。
超進化版傳送門^^
本文源碼:http://pan.baidu.com/s/1rIYz6
本文轉自:http://vaero.blog.51cto.com/4350852/939413
from: http://www.cnblogs.com/sishuiliuyun/p/3461084.html
【轉】Android Http Server