关闭侦听ServerSocket

时间:2011-05-25 07:31:26

标签: java

在我的服务器应用程序中,我正在尝试处理使用ServerSocket的服务器,如

  1. 启动服务器并等待连接。
  2. 停止与客户端连接的服务器。
  3. 停止正在等待客户端的服务器。
  4. 我可以使用

    启动服务器并使其等待线程内的客户端
    socket = serverSocket.accept();
    

    我想要做的是我想手动关闭等待连接的套接字,我尝试过使用,

    if (thread != null) {
         thread.stop();
         thread = null;
      }
      if (socket != null) {
         try {
            socket.close();
            socket = null;
         }
         catch (IOException e) {
            e.printStackTrace();
         }
      }
    

    在执行上面的代码后,即使socket变为null,当我尝试从客户端连接到服务器时,连接也会建立,所以我的问题是如何中断在这里监听连接的serversocket,

    socket = serverSocket.accept();
    

2 个答案:

答案 0 :(得分:4)

我认为处理这种情况的一种常见方法是使accept()调用时间在循环中。

类似于:

ServerSocket server = new ServerSocket();
server.setSoTimeout(1000); // 1 second, could change to whatever you like

while (running) { // running would be a member variable
     try {
         server.accept(); // handle the connection here
     }
     catch (SocketTimeoutException e) {
          // You don't really need to handle this
     }
}

然后,当您想要关闭服务器时,只需将代码设置为“running”为false,它就会关闭。

我希望这是有道理的!

答案 1 :(得分:2)

关闭ServerSocket,并抓住结果SocketClosedException

摆脱thread.stop()。为什么,see the Javadoc