Android Http Server


Android Http Server

引言
         Android如何構建Http服務器呢?本文的小例子,約莫着,還是能做個參考的^^。恩,例子實現的是PC瀏覽手機文件,支持了下載和刪除。
 
准備
         Http協議現今還是RFC2616吧,其基礎的知識還是有必要了解的。弄份協議規范書參考,是個不錯的選擇。之后呢,就可以開始了^^。
 
         起初,想自己寫個Http服務器學習來着,后來懶了==。有興趣的,推薦NanoHTTPD,很小型的僅一個類的http服務器,不過,只部分支持Http/1.1。當然還有更簡單的實現例子,不過,支持的就更少更單一了。
         繼而,還是用了SDK內的HttpService實現的。該部分api源自apache httpcomponents項目中的http core。由於SDK的不同版本,在使用細節上與最新的http core還是有很多小差異的。至於本文例子,是api-8上的實現。
 
創建 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(); 
} 
啟動 Server
         創建了個WebService,將WebServer套進去,實現Service方式。界面很簡單,就一個按鈕,啟動如下:
訪問 Server
         筆記本訪問上述網址唄。
  當目錄存在且可讀時才有上述畫面,不然會簡單報個404、403什么的頁面。當可寫時,增加刪除選項。返回響應頁面,在HttpFileHandler內處理的。
         1)下載
         文件夾:會自動打包成zip下載。其在HttpZipHandler內處理的。
         文件:自動判斷類型,或顯示或下載。沒多做處理,仍就是HttpFileHandler處理的。
         2)刪除
         會提示是否刪除。確定刪除的話,會等處理結束提示完成,繼而確認自動刷新。
用的jquery impromptu插件,相關css、js在assets/wfs目錄內。CopyUtil提供了復制assets目錄至系統目錄的方法。
 
后記
         前段時間開始看其他‘亂糟糟’的東西了。Android的小例子可能不太會再寫了==。
 
          超進化版傳送門^^
 
 
本文源碼:http://pan.baidu.com/s/1rIYz6
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM