首页 > 编程知识 正文

Android 如何在Android项目中搭建HTTP服务器,如何搭建中转服务器

时间:2023-05-06 08:34:07 阅读:221863 作者:3293

前言

顾客在无人售货机前购买商品,需要把选购的商品信息上传给Android应用并显示在屏幕上,通信协议为Http协议,无人售货机将作为客户端,Android应用作为服务端,通过http协议,将商品信息上传给Android应用并显示,在这样的场景下,就需要再Android应用程序中搭建一个Http服务器,在Android应用程序中搭建服务器不比java后台那样,那么有什么好的方式可以实现这样的应用场景呢?现在是开源的世界,什么样的需求和功能,都能够很容易找到解决方案,我们可以通过一个开源的服务器框架来实现,它就是NanoHTTPD,NanoHTTPD是一个免费、轻量级的(只有一个Java文件) HTTP服务器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 请求,支持文件上传,占用内存很小,如果要使用它的话,需要在官网下载源码,把相应的源码拷贝到自己的项目中,并继承相应的类。

开始在Android项目中搭建Http服务器

1、首先需要下载NanoHTTPD的源码,官网的源码下载下来到放到项目中使用可能比较麻烦,为了方便,我这里提供一个我自己在使用的源码,源码地址:
https://pan.baidu.com/s/1BrDCA66jajI8CWJroSikpw

2、源码下载下来以后,将其拷贝在自己的项目中,下图是我拷贝到项目中的目录结构,仅供参考:

3、拷贝到自己项目中以后,创建一个新类,并继承NanoHTTPD类,重写serve()方法,注意构造函数不能少,在创建对象时,需要把端口传给父类。

public class Http extends NanoHTTPD { private static final String TAG = "Http"; public Http(int port) { super(port); } @Override public Response serve(IHTTPSession session) { try { // 这一句话必须要写,否则在获取数据时,获取不到数据 session.parseBody(new HashMap<String, String>()); } catch (IOException e) { e.printStackTrace(); } catch (ResponseException e) { e.printStackTrace(); } StringBuilder builder = new StringBuilder(); Method method = session.getMethod(); String uri = session.getUri(); Map<String, String> parms = session.getParms(); String data = parms.get("data");//这里的data是POST提交表单时key Log.i(TAG, "uri: "+uri);//如果有uri,会打印出uri Log.i(TAG, "data: "+data); builder.append("任意内容");// 反馈给调用者的数据 return newFixedLengthResponse(builder.toString()); }

4、在项目中新建一个Android服务,在该服务的onStartCommand()方法中创建刚才新建好的Http对象并调用它的方法start()方法开启http服务,端口可任意指定(0~65535之间都可以)。

public class MyServer extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // 创建对象,端口我这里设置为8080 HttpService myServer = new HttpService(8080); try { // 开启HTTP服务 myServer.start(); } catch (IOException e) { e.printStackTrace(); } return super.onStartCommand(intent, flags, startId); }}

5、启动项目,通过http请求工具进行测试,前提是项目所在的设备需要连接网络,测试地址是设备上的IP地址加上端口,最后可以看到Android项目服务器接收到了数据。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。