nanohttpd开发

作者: 蔡振辉 | 来源:发表于2019-03-28 10:39 被阅读10次

    Android 应用内架设服务使用NanoHTTPD

    github地址点击打开链接找到releases下载相应jar包导入到Android studio 中,添加网络权限,创建类继承NanoHTTPD,重写serve方法即可

    public class HttpServer extends NanoHTTPD {
    public static final int DEFAULT_SERVER_PORT = 8020;
    private static final String REQUEST_ROOT = "/";

    private Handler mSelfHandler;
    private respBody mRespBody;
    
    private CutTicketDeviceThread mCutTicketDeviceThread;
    
    
    public HttpServer(Thread mThread) {
        super(DEFAULT_SERVER_PORT);
    
        //mylog.setFilename("HttpServer.log");
        mCutTicketDeviceThread = (CutTicketDeviceThread) mThread;
        mylog.debug(String.format("HttpServer创建 port=%d", DEFAULT_SERVER_PORT));
    
    }
    
    @Override
    public Response serve(IHTTPSession session) {
        Map<String, String> header = session.getHeaders();
        if ("127.0.0.1".equals(header.get("http-client-ip")) & "/sale".equals(session.getUri())) {
            return responseSale(session);
        }
        if (REQUEST_ROOT.equals(session.getUri())) {
            mylog.error("客户端请求路径错误:" + REQUEST_ROOT);
            return responseRootPage(session);
        }
    
        mylog.error("客户端请求路径错误:" + session.getUri());
        return response404(session, session.getUri());
    }
    

    public Response response404(IHTTPSession session, String url) {
    StringBuilder builder = new StringBuilder();
    builder.append("<!DOCTYPE html><html><body>");
    builder.append("Sorry, Can't Found " + url + " !");
    builder.append("</body></html>\n");
    mylog.error(" return 404");
    return new Response(builder.toString());
    }
    }
    利用server启动服务

    public class HttpService extends Service {

    private HttpServer mHttpServer;
    private boolean bServerStarted;
    
    private static Lock lock = new ReentrantLock();
    
    @Override
    public void onCreate()
    {
       
        bServerStarted=false;
    
        mylog.info( "HttpService Create.");
        return;
    }
    
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        startServer();
        return START_STICKY;
    }
    
    
    @Override
    public void onDestroy() {
        stopServer();
        super.onDestroy();
    }
    
    /**
     * Start server.
     */
    private void startServer() {
        if (mHttpServer != null  && !bServerStarted)
        {
            try {
                mHttpServer.start();
                bServerStarted = true;
                
            }catch(Exception e){
                e.printStackTrace();
            }
        }else{
            if(mHttpServer!=null)
            {
                mylog.info(String.format("Http服务已经启动了 mHttpServer=%s bServerStarted=%s  ....", mHttpServer.toString(), bServerStarted ? "true" : "false"));
            }
        }
        return;
    }
    
    
    /**
     * Stop server.
     */
    private void stopServer() {
        if (mHttpServer != null)
        {
            try {
                mHttpServer.stop();
                bServerStarted = false;
                mylog.info(  "mHttpServer Stop().....");
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return;
    }
    
    
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    

    }


    作者:小粪球圆又圆
    来源:CSDN
    原文:https://blog.csdn.net/shengsheng1_1/article/details/79743878
    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

        本文标题:nanohttpd开发

        本文链接:https://www.haomeiwen.com/subject/bsgfbqtx.html