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
image.png
nanohttpd文件服务器,NanoHttpd 轻量级的 HTTP 服务器相关推荐
- 4月11日云栖精选夜读 | 阿里云异构计算发布:轻量级GPU云服务器实例VGN5i
[点击订阅云栖夜读周刊] 阿里云发布了国内首个公共云上的轻量级GPU异构计算产品--VGN5i实例,该实例打破了传统直通模式的局限,可以提供比单颗物理GPU更细粒度的服务,从而让客户以更低成本.更高弹 ...
- Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
2019独角兽企业重金招聘Python工程师标准>>> 新版发布 近日,轻量级开源 Web 服务器 Tengine 发布了2.3.0版本,新增如下特性: ngx_http_proxy ...
- 多服务器认证协议,轻量级的多服务器认证协议及其应用的研究
摘要: 随着科学技术水平的提高,人类生活与网络息息相关.为了获取真实有效的服务,身份认证技术是其中关键因素.在传统的单服务器环境中,用户为了获取不同的服务,需要在不同的服务器下反复注册,并记住大量的账 ...
- 鸟哥的Linux私房菜(服务器)- 第十六章、文件服务器之二: SAMBA 服务器
第十六章.文件服务器之二: SAMBA 服务器 最近更新日期:2011/07/29 如果想要共享档案,在 Linux 对 Linux 的环境下,最简单的方法就是透过 NIS 这玩意儿了!至于 Wind ...
- 一个轻量级的域名解析服务器软件--dnsmasq
一.前言 最近,在研究Hyperledger Fabric的多机部署.因为docker容器分布在多台机器上,解决相互之间通信问题的方案通常有以下几种: K8s,虽然k8s也可以解决这个问题,但是k8s ...
- Qt:基于Qt开发的轻量级HTTP/HTTPS服务器
介绍 JQHttpServer是基于Qt开发的轻量级HTTP/HTTPS服务器,目前支持GET和POST两个协议. 底层有QTcpSocket.QSslSocket和QLocalSocket三个版本, ...
- 使用NanoHTTPD在Android上建立本地服务器
NanoHttpd是一个开源库,使用Java实现,可以在非常方便地集成到Android应用中去,实现了一个轻量级的 Web Server. 项目地址: https://github.com/NanoH ...
- 第十六章、文件服务器之二: SAMBA 服务器
如果想要共享档案,在 Linux 对 Linux 的环境下,最简单的方法就是透过 NIS 这玩意儿了!至于 Windows 对 Windows 的环境下,最简单的方法则是『网络上的芳邻』啊.那如果你的 ...
- 电脑文件服务器地址大全,电脑的服务器地址大全
电脑的服务器地址大全 内容精选 换一换 仅Windows Server 2012 R2和Windows Server 2016需要设置虚拟内存.裸金属服务器的内存很大,自动分配的虚拟内存会占用大量的系 ...
- 群晖nas和文件服务器的区别,nas云服务器的区别(群晖nas搭建云服务器)
其实云存储和普通的网盘或者邮箱是不同的概念 把网盘就说成云存储的,显得云存储. 邮箱就是另一个概念了哈 还有就是你的第一个问题, NAS 是一种采用直接与网络介. NAS存储与私有云有什么区别? 一个 ...
最新文章
- springboot之异步调用@Async
- 字符串还可以这样初始化--uboot篇
- QT的QIcon类的使用
- mysql安装完成后登入错误
- Android应用程序启动Binder线程源码分析
- Qt使用系统代理访问网络
- oracle集群如何搭建,Oracle集群搭建步骤.docx
- R语言 伯努利试验和二项分布
- 《计算机网络教程》(微课版 第五版)第五章 运输层 课后习题及答案
- 谈判如何在谈判中_工资谈判软件开发人员指南
- .net 将数字转换为人民币大写
- VSCode中snippets(代码模板)的使用
- Eclipse 32位,64位 系统安装
- win10系统如何关闭服务器,win10命令关闭服务器该怎么操作关闭?
- 中标麒麟matlab,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
- 简书PC端私密文章放在哪?
- 将输入值为非数字的字符替换为空
- 图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
- 防作弊-页面失焦与禁键
- virtualbox 安装iso镜像
热门文章
- 查看服务器风扇转速等
- yuv422sp to yuv422p
- 论文笔记 -- ISSCC-2020: GANPU (Multi-DNN Processor for GANs with Speculative Dual-Sparsity Exploitation)
- 阅读VDN:Value-Decomposition Networks For Cooperative Multi-Agent Learning Based On Team Reward
- VDN互联网数据驱动 FOR PB
- 计算机毕业论文技术可行性怎么写,毕业论文怎么写可行性分析?
- 红外红外传感器电路图及工作原理
- hlw8012arduino代码_麻雀虽小五脏俱全-liteduino arduino开发板PCB文件
- PHP多功能自动发卡平台源码带手机版 带多套商户模板
- 如何开机进测试内存软件,小U讲解内存检测工具memtest详细使用教程