zoukankan      html  css  js  c++  java
  • 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
     
     
     
     
  • 相关阅读:
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherK
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher I
    pat 1065 A+B and C (64bit)(20 分)(大数, Java)
    pat 1069 The Black Hole of Numbers(20 分)
    pat 1077 Kuchiguse(20 分) (字典树)
    pat 1084 Broken Keyboard(20 分)
    pat 1092 To Buy or Not to Buy(20 分)
    pat 1046 Shortest Distance(20 分) (线段树)
    pat 1042 Shuffling Machine(20 分)
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/3461084.html
Copyright © 2011-2022 走看看