Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaSpring引导中停止服务器套接字_Java_Angular_Spring Boot_Sockets_Serversocket - Fatal编程技术网

如何在JavaSpring引导中停止服务器套接字

如何在JavaSpring引导中停止服务器套接字,java,angular,spring-boot,sockets,serversocket,Java,Angular,Spring Boot,Sockets,Serversocket,我使用SpringBoot和angular,angular中有一个方法,调用SpringBoot来启动服务器。 在服务器运行之后,在一段未定义的时间之后,我必须通过向spring boot发送一些请求来停止服务器。 我怎么做?服务器正在运行无限循环,它侦听客户端连接。 有没有一种方法可以发送一些错误的客户端请求并说-嘿,客户端说“停止”,那么就停止?还是有类似的东西 这是我的控制器方法: @RequestMapping(value = "/server") publi

我使用SpringBoot和angular,angular中有一个方法,调用SpringBoot来启动服务器。 在服务器运行之后,在一段未定义的时间之后,我必须通过向spring boot发送一些请求来停止服务器。 我怎么做?服务器正在运行无限循环,它侦听客户端连接。 有没有一种方法可以发送一些错误的客户端请求并说-嘿,客户端说“停止”,那么就停止?还是有类似的东西

这是我的控制器方法:

    @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();
}