【问题标题】:How to stop server socket in java spring boot如何在 java spring boot 中停止服务器套接字
【发布时间】:2020-08-29 20:58:22
【问题描述】:

我正在使用 spring boot 和 angular,并且我有一个 angular 方法,它调用 spring boot 来启动服务器。 服务器运行后,经过一段时间未定义,我必须通过向 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();
    }
}

这很快就会成为一个很好的客户,但还不是:

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

欢迎任何建议!提前致谢!

【问题讨论】:

    标签: java angular spring-boot sockets serversocket


    【解决方案1】:

    您可以使用下面的setSoTimeout()函数来检查客户端是否请求停止。

    //Sample code
    
    boolean stop_received=false; //Change this to true when stop request received
    ss.setSoTimeout(3000); //Set timeout to 3 seconds
    while (true) {
            try{
                Socket socket = ss.accept();
            }
            catch(java.net.SocketTimeoutException as e) //Timeout reached
            {
                if(stop_received==true) //Any stop request from client ?
                {
                    ss.close(); //Yes. Close the server socket and exit while loop
                    break;
                }
                else{
                    continue; //No. Continue accepting
                }
            }
            Log.log("Established connection with " + socket.getInetAddress().getHostAddress());
            new Thread(new User(socket, room)).start();
        }
    

    更多详情请参考this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2022-06-21
      • 2013-02-11
      • 2015-12-16
      相关资源
      最近更新 更多