在我的服务器应用程序中,我正在尝试处理使用ServerSocket的服务器,如
我可以使用
启动服务器并使其等待线程内的客户端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();
答案 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。