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

前言

顾客在无人售货机前购买商品,需要把选购的商品信息上传给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项目服务器接收到了数据。

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值