使用NanoHttpd在Android上实现HttpServer
来源:互联网 发布:关于英语听力的软件 编辑:程序博客网 时间:2024/05/16 17:45
使用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<String, String> files = new HashMap<String, String>(); /*获取header信息,NanoHttp的header不仅仅是HTTP的header,还包括其他信息。*/ Map<String, String> 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好用。
0 0
- 使用NanoHttpd在Android上实现HttpServer
- 在Android上实现HttpServer
- 在Android上实现HttpServer
- 在Android上实现HttpServer
- 使用NanoHTTPD在Android上建立本地服务器
- 通过NanoHTTPD在终端设备上实现HTTP及流媒体服务
- 使用NanoHttpd实现简易WebServer
- android端HttpServer的实现
- 在mac上开启httpServer服务
- 如何开发自己的HttpServer-NanoHttpd源码解读
- 如何开发自己的HttpServer-NanoHttpd源码解读
- 使用nio实现简单的httpServer
- Android实现一个APP只能在一部手机上使用
- netty 简单httpserver实现
- 用libevent实现httpserver
- Java HttpServer实现交互
- 内置jetty实现Httpserver
- httpserver C实现
- Rxjava操作符(defer,compose,retryWhen)
- NYOJ 1253 Turing equation【题意是关键,模拟】
- js 下载文件 前端 后台 处理
- Lua中文教程学习笔记 (4) 函数
- mongoDB 长/短连接
- 使用NanoHttpd在Android上实现HttpServer
- apache+svn配置过程
- centos7 yum安装 nginx php7 php-fpm mysql
- 事件分发机制
- css 怎么把一个元素藏起来
- JNI学习之Invocation API
- 解决java.io.FileNotFoundException: D:\xxx\yyy (拒绝访问。)问题
- [新闻摘录]山西云计算项目匆忙上马 商家利用云概念只为圈地
- Linux上Zookeeper集群的配置