前言
在手机上搭建服务器?没错,我自己都会想哪里有人要在把手机当作服务器,不过,确确实实,由于一个项目,我需要这么干。 最初映入脑海的就是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/