前言

其实主要讨论的是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

image.png

nanohttpd文件服务器,NanoHttpd 轻量级的 HTTP 服务器相关推荐

  1. 4月11日云栖精选夜读 | 阿里云异构计算发布:轻量级GPU云服务器实例VGN5i

    [点击订阅云栖夜读周刊] 阿里云发布了国内首个公共云上的轻量级GPU异构计算产品--VGN5i实例,该实例打破了传统直通模式的局限,可以提供比单颗物理GPU更细粒度的服务,从而让客户以更低成本.更高弹 ...

  2. Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本

    2019独角兽企业重金招聘Python工程师标准>>> 新版发布 近日,轻量级开源 Web 服务器 Tengine 发布了2.3.0版本,新增如下特性: ngx_http_proxy ...

  3. 多服务器认证协议,轻量级的多服务器认证协议及其应用的研究

    摘要: 随着科学技术水平的提高,人类生活与网络息息相关.为了获取真实有效的服务,身份认证技术是其中关键因素.在传统的单服务器环境中,用户为了获取不同的服务,需要在不同的服务器下反复注册,并记住大量的账 ...

  4. 鸟哥的Linux私房菜(服务器)- 第十六章、文件服务器之二: SAMBA 服务器

    第十六章.文件服务器之二: SAMBA 服务器 最近更新日期:2011/07/29 如果想要共享档案,在 Linux 对 Linux 的环境下,最简单的方法就是透过 NIS 这玩意儿了!至于 Wind ...

  5. 一个轻量级的域名解析服务器软件--dnsmasq

    一.前言 最近,在研究Hyperledger Fabric的多机部署.因为docker容器分布在多台机器上,解决相互之间通信问题的方案通常有以下几种: K8s,虽然k8s也可以解决这个问题,但是k8s ...

  6. Qt:基于Qt开发的轻量级HTTP/HTTPS服务器

    介绍 JQHttpServer是基于Qt开发的轻量级HTTP/HTTPS服务器,目前支持GET和POST两个协议. 底层有QTcpSocket.QSslSocket和QLocalSocket三个版本, ...

  7. 使用NanoHTTPD在Android上建立本地服务器

    NanoHttpd是一个开源库,使用Java实现,可以在非常方便地集成到Android应用中去,实现了一个轻量级的 Web Server. 项目地址: https://github.com/NanoH ...

  8. 第十六章、文件服务器之二: SAMBA 服务器

    如果想要共享档案,在 Linux 对 Linux 的环境下,最简单的方法就是透过 NIS 这玩意儿了!至于 Windows 对 Windows 的环境下,最简单的方法则是『网络上的芳邻』啊.那如果你的 ...

  9. 电脑文件服务器地址大全,电脑的服务器地址大全

    电脑的服务器地址大全 内容精选 换一换 仅Windows Server 2012 R2和Windows Server 2016需要设置虚拟内存.裸金属服务器的内存很大,自动分配的虚拟内存会占用大量的系 ...

  10. 群晖nas和文件服务器的区别,nas云服务器的区别(群晖nas搭建云服务器)

    其实云存储和普通的网盘或者邮箱是不同的概念 把网盘就说成云存储的,显得云存储. 邮箱就是另一个概念了哈 还有就是你的第一个问题, NAS 是一种采用直接与网络介. NAS存储与私有云有什么区别? 一个 ...

最新文章

  1. springboot之异步调用@Async
  2. 字符串还可以这样初始化--uboot篇
  3. QT的QIcon类的使用
  4. mysql安装完成后登入错误
  5. Android应用程序启动Binder线程源码分析
  6. Qt使用系统代理访问网络
  7. oracle集群如何搭建,Oracle集群搭建步骤.docx
  8. R语言 伯努利试验和二项分布
  9. 《计算机网络教程》(微课版 第五版)第五章 运输层 课后习题及答案
  10. 谈判如何在谈判中_工资谈判软件开发人员指南
  11. .net 将数字转换为人民币大写
  12. VSCode中snippets(代码模板)的使用
  13. Eclipse 32位,64位 系统安装
  14. win10系统如何关闭服务器,win10命令关闭服务器该怎么操作关闭?
  15. 中标麒麟matlab,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
  16. 简书PC端私密文章放在哪?
  17. 将输入值为非数字的字符替换为空
  18. 图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
  19. 防作弊-页面失焦与禁键
  20. virtualbox 安装iso镜像

热门文章

  1. 查看服务器风扇转速等
  2. yuv422sp to yuv422p
  3. 论文笔记 -- ISSCC-2020: GANPU (Multi-DNN Processor for GANs with Speculative Dual-Sparsity Exploitation)
  4. 阅读VDN:Value-Decomposition Networks For Cooperative Multi-Agent Learning Based On Team Reward
  5. VDN互联网数据驱动 FOR PB
  6. 计算机毕业论文技术可行性怎么写,毕业论文怎么写可行性分析?
  7. 红外红外传感器电路图及工作原理
  8. hlw8012arduino代码_麻雀虽小五脏俱全-liteduino arduino开发板PCB文件
  9. PHP多功能自动发卡平台源码带手机版 带多套商户模板
  10. 如何开机进测试内存软件,小U讲解内存检测工具memtest详细使用教程