使用NanoHttpd在Android上实现HttpServer

最近的项目中需要在Androd上搭建一个HttpServer,这个Server用于接收智能设备的实时数据,这个时候就需要使用Java打架一个HttpServer服务了,最初的方案使用Java自带的com.sun.net.httpserver.HttpServer然后发现Android并没有实现这个类的依赖库,造成总是空指针错误。接下来找到了NanoHttpd发现使用它是一个比较完美的方案。

NanoHttpd介绍

NanoHttpd是使用Java实现的微型web server,是一个可嵌入应用程序的轻量级的HTTP Server。

结合Android使用

下面我就结合Android使用,目前我将其放在了Server中。

public class MainService extends Service {    private HttpServer mHttpServer = null;//这个是HttpServer的句柄。      .............      @Override    public void onCreate() {    //在这里开启HTTP Server。        mHttpServer = new HttpServer(8092);        try {            mHttpServer.start();        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void onDestroy() {    //在这里关闭HTTP Server        if(mHttpServer != null)            mHttpServer.stop();    }    ...............

HttpServer的具体实现

public class HttpServer extends NanoHTTPD {    /*这类就是要自定义一些返回值,我在这里定义了700。都属于自定义*/    public enum Status implements NanoHTTPD.Response.IStatus {        SWITCH_PROTOCOL(101, "Switching Protocols"),        NOT_USE_POST(700, "not use post");        private final int requestStatus;        private final String description;        Status(int requestStatus, String description) {            this.requestStatus = requestStatus;            this.description = description;        }        @Override        public String getDescription() {            return null;        }        @Override        public int getRequestStatus() {            return 0;        }    }    public HttpServer(int port) {        super(port);    }    @Override    public Response serve(IHTTPSession session) {        /*我在这里做了一个限制,只接受POST请求。这个是项目需求。*/        if (Method.POST.equals(session.getMethod())) {            Map files = new HashMap();            /*获取header信息,NanoHttp的header不仅仅是HTTP的header,还包括其他信息。*/            Map header = session.getHeaders();            try {                /*这句尤为重要就是将将body的数据写入files中,大家可以看看parseBody具体实现,倒现在我也不明白为啥这样写。*/                session.parseBody(files);                /*看就是这里,POST请教的body数据可以完整读出*/                String body = session.getQueryParameterString();                CNTrace.d("header : " + header);                CNTrace.d("body : " + body);                /*这里是从header里面获取客户端的IP地址。NanoHttpd的header包含的东西不止是HTTP heaer的内容*/                header.get("http-client-ip"),            } catch (IOException e) {                e.printStackTrace();            } catch (ResponseException e) {                e.printStackTrace();            }            /*这里就是为客户端返回的信息了。我这里返回了一个200和一个HelloWorld*/            return newFixedLengthResponse(NanoHTTPD.Response.Status.OK, "text/html", "HelloWorld");        }else            return newFixedLengthResponse(Status.NOT_USE_POST, "text/html", "use post");    }}

结束

到此结束了,NanoHttpd对Android来说是一个不错的微型服务器解决方案。也可以在Android网站上找到,这个方案SimpleWebServer.java,经过对比真的没有NanoHttpd好用。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. 箭头函数的基础使用
  3. NPM 和webpack 的基础使用
  4. Python list sort方法的具体使用
  5. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  6. python list.sort()根据多个关键字排序的方法实现
  7. Android中用Application类实现全局变量
  8. android 类似QQ 换皮肤 实现思路 apk资源共享
  9. Android(安卓)Preference的使用总结(很全很详细)以及SharedPrefere

随机推荐

  1. 理解Android的本地Service和跨进程Servic
  2. Android小项目之六 apk下载
  3. 尝试查看所有XML文件的图形布局时出现Sta
  4. 最近一年做Android项目过程中,对其的一些
  5. listview中的Android listview适配器(jso
  6. android 2D 游戏的开发的方法
  7. Android 实现Activity后台运行
  8. SQLite的Android光标在方法调用时崩溃
  9. Java Android套接字连接。错误的IP地址导
  10. Android 图片添加水印图片或者文字