【Android】手机端使用NanoHTTPD搭建服务器

序言

NanoHTTPD 是一个轻量级的 Java HTTP 服务器库,可以在应用程序中快速搭建一个简单的 HTTP 服务器。

准备工作

引入依赖

implementation 'org.nanohttpd:nanohttpd:2.3.1'

添加网络访问权限

<uses-permission android:name="android.permission.INTERNET" />
搭建服务器

项目中创建一个名为 MyServer 的类,并继承自 NanoHTTPD。在该类中,实现 serve 方法来处理请求。

import android.content.Context;import fi.iki.elonen.NanoHTTPD;import java.io.IOException;
import java.util.Map;public class MyServer extends NanoHTTPD {private Context context;public MyServer(Context context) {super(8080);this.context = context;}@Overridepublic Response serve(IHTTPSession session) {String uri = session.getUri();// 处理 GET 请求if (session.getMethod() == Method.GET) {switch (uri) {case "/hello":return newFixedLengthResponse("Hello, World!");case "/time":String currentTime = getCurrentTime();return newFixedLengthResponse(currentTime);default:return newFixedLengthResponse("Invalid path");}}// 处理 POST 请求if (session.getMethod() == Method.POST) {if ("/upload".equals(uri)) {try {// 解析 POST 请求的参数Map<String, String> files = session.getParms();// 处理上传的文件等逻辑// ...return newFixedLengthResponse("Upload successful");} catch (IOException e) {e.printStackTrace();return newFixedLengthResponse("Upload failed: " + e.getMessage());}}}return newFixedLengthResponse(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Not found");}private String getCurrentTime() {// 获取当前时间的逻辑// ...return "Current time: " + System.currentTimeMillis();}
}

在 serve 方法中,我们首先检查请求的方法,如果是 GET 方法,我们根据不同的路径返回不同的响应。例如,当访问 /hello 路径时,服务器将返回 “Hello, World!”。当访问 /time 路径时,服务器将返回当前时间。

如果是 POST 方法,并且路径为 /upload,则我们可以处理上传的文件等逻辑。在这个例子中,我们只是简单地返回上传成功或失败的消息。

最后,如果无法匹配到合适的路径,则返回 “Not found”。

启动服务器

创建 MyServer 的实例,并调用 start 方法来启动服务器。

public class MainActivity extends AppCompatActivity {private MyServer server;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 创建服务器实例并启动server = new MyServer(this);try {server.start();Log.d("Server", "Server started");} catch (IOException e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {super.onDestroy();// 停止服务器if (server != null) {server.stop();}}
}

一旦服务器启动,可以在设备或模拟器上的浏览器中输入 http://localhost:8080/hello 或 http://localhost:8080/time 等地址,来查看服务器返回的响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战杯 python 爬虫与协同过滤的新闻推荐系统

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python 爬虫与协同过滤的新闻推荐系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&…

【人工智能】神奇的Embedding:文本变向量,大语言模型智慧密码解析(10)

什么是嵌入&#xff1f; OpenAI 的文本嵌入衡量文本字符串的相关性。嵌入通常用于&#xff1a; Search 搜索&#xff08;结果按与查询字符串的相关性排序&#xff09;Clustering 聚类&#xff08;文本字符串按相似性分组&#xff09;Recommendations 推荐&#xff08;推荐具有…

SIMD学习笔记1

参考 http://const.me/articles/simd/simd.pdf https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#catsArithmetic&expand3904,3913,4011,34,4014,4602,4011&techsMMX,AVX_512,AMX,SVML,Other&ig_expand11 示例&#xff1a;对4个数字求平…

AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA和CAN协议2.0B的总线控制器研究与设计(续)

目录 3.2 寄存器管理模块 3.2.1寄存器规划及设计 3.2.2 BasicCAN模式 3.2.3 PeliCAN模式

【Scala 】3. 类和对象

3. 类和对象 scala是一种面向对象的函数&#xff0c;其中一部分就是scala语言中支持类的实现。 3.1 类的继承 &#xff08;1&#xff09;基类&#xff08;父类&#xff09; 类中包含实现面积的计算方法 class Shape { def getArea():Float { return 0 } }&#xff0…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RichText组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之RichText组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、RichText组件 鸿蒙&#xff08;HarmonyOS&#xff09;富文本组件&#xff0c;…

【学习心得】Python好库推荐——tqdm

在很多时候&#xff0c;你都需要一个进度条来告知当前程序的运行状况和进展。tqdm 是一个在Python中广泛使用的命令行进度条工具库&#xff01;下面是这个库的主页&#xff1a;https://tqdm.github.io/ 一、快速入门 &#xff08;1&#xff09;for循环中 代码&#xff1a; …

句子嵌入: 交叉编码和重排序

这个系列目的是揭开嵌入的神秘面纱&#xff0c;并展示如何在你的项目中使用它们。第一篇博客介绍了如何使用和扩展开源嵌入模型&#xff0c;选择现有的模型&#xff0c;当前的评价方法&#xff0c;以及生态系统的发展状态。第二篇博客将会更一步深入嵌入并解释双向编码和交叉编…

C语言的起源

1940年代&#xff0c;最早的开始&#xff0c;编程语言是机器语言&#xff0c;用0/1表示的、计算机能直接识别和执行的一种机器指令的集合。最早的编程方式&#xff0c;就是给纸带打孔或者卡片机打孔。机器语言直接与硬件沟通&#xff0c;极具针对性&#xff0c;但是非常难于理解…

企业微信会话存档:大文件拉取、加密、上传

承接之前的文章企业微信会话存档sdk报错&#xff1a;A fatal error has been detected by the Java Runtime Environment 在之前的那篇文章结尾&#xff0c;我说发现了系统另外一个隐含的bug&#xff1a;企业微信会话存档拉取媒体文件是分片拉取&#xff0c;我的处理方式有问题…

IP地址如何保护网络安全

面对网络攻击时&#xff0c;仅依靠常态化的网络安全防御系统已捉襟见肘&#xff0c;如联合使用IP地址数据可以形成多元化的安全解决方案&#xff0c;全面监控网络活动&#xff0c;发现潜在威胁&#xff0c;制定有针对性的应对措施。 网络攻击追踪 当网站或应用遭受DDoS等网络攻…

Helm 简介:Kubernetes 的包管理器

简介 将应用程序部署到 Kubernetes&#xff08;一个功能强大且流行的容器编排系统&#xff09;可能会很复杂。设置单个应用程序可能涉及创建多个相互依赖的 Kubernetes 资源&#xff0c;例如 pods、services、deployments 和 replicasets&#xff0c;每个资源都需要编写详细的…

基于YOLOv8的暗光低光环境下(ExDark数据集)检测,加入多种优化方式---DCNv4结合SPPF ,助力自动驾驶(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了暗光低光数据集检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析&#xff0c;以及如何优化提升检测性能。 &#x1f4a1;&#x1f4a1;&#x1f4a1;加入 DCNv4结合SPPF mAP0.5由原始的0.682提升至…

在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程

一、前期准备&#xff1a; 1.安装VMware 虚拟机软件&#xff08;不在讲解&#xff0c;可自行去下载安装&#xff09;。官网&#xff1a;https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-PLAYER-1750&productId1377&rPId111471 2.下载iso…

【AWS】step-functions服务编排

文章目录 step-functionsState machine typeStandard workflowsExpress workflows design skillsError handlingsaga Transaction processing控制分布式系统中的并发性 收费 作为AWS Serverless无服务器的一个重要一环 使用step-functions方法将 AWS 服务链接在一起 step-funct…

用python编写爬虫,爬取二手车信息+实验报告

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88805518使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件&#xff0c;再run all就行 注意事项 可能遇到的bug 暂无&#xff0c;有的话私信我

如何决定K8S Pod的剔除优先级

在Kubernetes&#xff08;k8s&#xff09;中&#xff0c;当节点资源面临压力时&#xff0c;如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后&#xff0c;引入了基于Pod优先级的调度策略&#xff0c;即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…

iOS平台如何实现低延迟RTSP转RTMP推送?

技术背景 好多开发者都知道我们有Windows、Android、Linux平台的RTSP转RTMP推送模块&#xff0c;实际上&#xff0c;iOS平台我们也有&#xff0c;并在2016年就已发布。我们都知道&#xff0c;一个好的RTSP转RTMP推送模块&#xff0c;需要足够稳定的前提下&#xff0c;还要低延…

Unity 接口、抽象类、具体类对象的配合使用案例

文章目录 示例1&#xff1a;接口&#xff08;Interface&#xff09;示例2&#xff1a;抽象类&#xff08;Abstract Class&#xff09;示例3&#xff1a;结合使用接口与抽象类示例4&#xff1a;多接口实现示例5&#xff1a;抽象类与接口结合 在Unity中使用C#编程时&#xff0c;接…

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同?

制作耳机壳的UV树脂和塑料材质在以下几个方面存在区别&#xff1a; 硬度与耐磨性&#xff1a;UV树脂具有较高的硬度和耐磨性&#xff0c;能够有效保护耳机内部零件&#xff0c;延长耳机使用寿命。而塑料材质相对较软&#xff0c;容易受到磨损。透明度与光泽度&#xff1a;UV树…