开发者

Close listening ServerSocket

In my Server application I'm trying to handle the Server which is using ServerSocket like,

  1. Start the server and wait for connection.
  2. Stop the server which is connected with a client.
  3. Stop the server which is waiting for a client.

I can able to start the server and make it to wait for client inside a thread using

socket = serverSocket.accept();

What I want to do is I want manually close the socket which is waiting for connectio开发者_高级运维n, I have tried using,

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

After executing the above code even though the socket becomes null, when I try to connect from client to server, the connection gets established, so my question is how to interrupt the serversocket which listening for connection over here,

socket = serverSocket.accept();


I think a common way of handling this is make the accept() call time out in a loop.

So something like:

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
     }
}

Then, when you wanted to shut down your server, just have your code set 'running' to false and it will shut down.

I hope this makes sense!


Just close the ServerSocket, and catch the resulting SocketClosedException.

And get rid of the thread.stop(). For why, see the Javadoc.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜