如何在JavaSpring引导中停止服务器套接字
我使用SpringBoot和angular,angular中有一个方法,调用SpringBoot来启动服务器。 在服务器运行之后,在一段未定义的时间之后,我必须通过向spring boot发送一些请求来停止服务器。 我怎么做?服务器正在运行无限循环,它侦听客户端连接。 有没有一种方法可以发送一些错误的客户端请求并说-嘿,客户端说“停止”,那么就停止?还是有类似的东西 这是我的控制器方法:如何在JavaSpring引导中停止服务器套接字,java,angular,spring-boot,sockets,serversocket,Java,Angular,Spring Boot,Sockets,Serversocket,我使用SpringBoot和angular,angular中有一个方法,调用SpringBoot来启动服务器。 在服务器运行之后,在一段未定义的时间之后,我必须通过向spring boot发送一些请求来停止服务器。 我怎么做?服务器正在运行无限循环,它侦听客户端连接。 有没有一种方法可以发送一些错误的客户端请求并说-嘿,客户端说“停止”,那么就停止?还是有类似的东西 这是我的控制器方法: @RequestMapping(value = "/server") publi
@RequestMapping(value = "/server")
public void startServer() throws SQLException, IOException {
server.Server.server();
}
这是服务器:
public static void server() throws IOException {
ServerSocket ss = new ServerSocket(PORT);
Log.log("Server initialized on port " + PORT);
listRooms = new ArrayList<>();
Room room = new Room("Principal");
addRoom(room);
while (true) {
Socket socket = ss.accept();
Log.log("Established connection with " + socket.getInetAddress().getHostAddress());
new Thread(new User(socket, room)).start();
}
}
欢迎任何意见!提前谢谢 您可以使用下面的
setSoTimeout()
函数检查客户端是否请求停止
//示例代码
布尔值stop_received=false//当收到停止请求时,将此更改为true
ss.setSoTimeout(3000)//将超时设置为3秒
while(true){
试一试{
套接字=ss.accept();
}
catch(java.net.SocketTimeoutException作为e)//达到超时
{
if(stop_received==true)//是否有来自客户端的停止请求?
{
ss.close();//是。关闭服务器套接字并退出while循环
打破
}
否则{
continue;//否。是否继续接受
}
}
Log.Log(“与”+socket.getInetAddress().getHostAddress()建立的连接”);
新线程(新用户(套接字、房间)).start();
}
有关更多详细信息,请参阅
public static void client() throws IOException {
NetworkManager net;
net = NetworkManager.getInstance();
net.setServer("127.0.0.1", 2014);
net.send("NICK " + "User");
new Thread(new Runnable() {
@Override
public void run() {
net.listenServer();
}
}).start();
}