【Android】 使用AndServer框架在手机上搭建服务器

前言

在手机上搭建服务器?没错,我自己都会想哪里有人要在把手机当作服务器,不过,确确实实,由于一个项目,我需要这么干。 最初映入脑海的就是Socket原生编程了,直到后来发现了封装成http服务器端的AndServer框架!!!

导入依赖

 implementation 'com.yanzhenjie.andserver:api:2.0.5'
annotationProcessor 'com.yanzhenjie.andserver:processor:2.0.5'

开启网络权限

<uses-permission android:name="android.permission.INTERNET"/>

服务器管理类

package com.example.andservertest;

import android.content.Context;
import android.util.Log;

import com.yanzhenjie.andserver.AndServer;
import com.yanzhenjie.andserver.Server;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;

public class ServerManager {

    private Server mServer;
    private static final String TAG = "ServerManager";

    /**
     * Create server.
     */
    public ServerManager(Context context) {
        InetAddress inetAddress = null;
        try {
        	//这里的ip地址是手机的ip地址,可通过手机设置>系统->关于手机查看
            inetAddress = InetAddress.getByName("192.168.1.11");
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }


        mServer = AndServer.serverBuilder(context)
            .inetAddress(inetAddress)
            .port(8080)
            .timeout(10, TimeUnit.SECONDS)
            .listener(new Server.ServerListener() {
                @Override
                public void onStarted() {
                    Log.i(TAG, "onStarted: 服务器启动");
                   
                }

                @Override
                public void onStopped() {
                   
                    Log.i(TAG, "onStopped: 服务器关闭");
                }

                @Override
                public void onException(Exception e) {
                
                    Log.i(TAG, "onException: 服务器出现异常"+e.getMessage());
                }
            })
            .build();
    }

    /**
     * Start server.
     */
    public void startServer() {
        if (mServer.isRunning()) {
            // TODO The server is already up.
        } else {
            mServer.startup();
        }
    }

    /**
     * Stop server.
     */
    public void stopServer() {
        if (mServer.isRunning()) {
            mServer.shutdown();
        } else {
            Log.w("AndServer", "The server has not started yet.");
        }
    }
}

测试用的Activity

package com.example.andservertest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button button1,button2;
    private ServerManager serverManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = findViewById(R.id.button_start);
        button2 = findViewById(R.id.button_stop);
        serverManager = new ServerManager(this);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                serverManager.startServer();
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                serverManager.stopServer();
            }
        });

    }
}

在这里插入图片描述

Controller

@RestController
public class UserController {

    @GetMapping("/123")
    String login() {
        Log.i(TAG, "login: 收到消息");
        return "你好啊兄弟";
    }
}

由于电脑和手机使用的是一个宽带,所以自然而然就在一个局域网了
对刚才写的Controller进行测试
在这里插入图片描述

关于AndServer

具体使用,可以看作者写的文档,很详细,在这里就不再多说了
https://yanzhenjie.com/AndServer/sample/

发布了243 篇原创文章 · 获赞 106 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_43889841/article/details/104300912