nanohttpd文件服务器,NanoHttpd 轻量级的 HTTP 服务器

前言

其实主要讨论的是android中的RPC,但是在这之前我们得在Android中搭建一个HTTP服务器,来供我们远程访问。

NanoHTTPD是一个免费、轻量级的(只有一个Java文件) HTTP服务器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 请求,支持文件上传,占用内存很小。可轻松定制临时文件使用和线程模型。

Server搭建

引入相关依赖

implementation 'org.nanohttpd:nanohttpd:2.3.1'

implementation 'com.github.briandilley.jsonrpc4j:jsonrpc4j:1.5.0'

implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.5'

创建我们的服务类

public class MyServer extends NanoHTTPD {

private Context mContext;

private final static int PORT = 33445;

public final static String TAG = "SharkChilli";

public MyServer(Context context) throws IOException {

super(PORT);

this.mContext = context;

start();

Log.i(TAG, "MyServer start");

}

@Override

public Response serve(IHTTPSession session) {

//打印请求数据

Log.i(TAG, "serve uri: " + session.getUri());

Log.i(TAG, "serve getQueryParameterString: " + session.getQueryParameterString());

Log.i(TAG, "serve getRemoteHostName: " + session.getRemoteHostName());

Log.i(TAG, "serve getRemoteIpAddress: " + session.getRemoteIpAddress());

session.getHeaders().forEach((key, val) -> {

Log.i(TAG, key + " : " + val);

});

InputStream inputStream = session.getInputStream();

// ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

try {

String msg = "

Hello server

";

return newFixedLengthResponse(msg);

} catch (Exception exception) {

return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "Internal Server Error!!!");

}

}

}

这里我们继承了NanoHTTPD并且覆盖了serve方法,在构造方法中调用了 super(PORT);用于监听指定端口。

以后外部的所以访问都会调用serve方法。IHTTPSession 中封装了本次请求的相关信息,在这一段代码中我打印了一些信息。

最后调用newFixedLengthResponse返回固定长度的结果

Activity启动服务

public class MainActivity extends AppCompatActivity {

public final static String TAG = "SharkChilli";

private MyServer mMyServer;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

try {

mMyServer = new MyServer(this);

} catch (IOException e) {

Log.e(TAG, "WebServer start failed", e);

}

}

@Override

protected void onDestroy() {

super.onDestroy();

if (mMyServer != null) {

mMyServer.closeAllConnections();

mMyServer = null;

Log.e(TAG, "app pause, so web server close");

}

}

}

上面代码就是onCreate启动服务,onDestroy关闭服务。其实这个步骤应该在Application中处理,这里为了方便就先这样了。

运行

启动app后访问收集app的ip

0168a586c8d7

image.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值