加入一个ServerSocket正在另一个线程堵塞accept,那如何停止accept或者关闭Socket? Server socket 设置下超时 setSoTimeout 然后在Listen线程中用interrupt 其实直接close socket也可以,不过会抛出异常
最好的办法是建立一个本地socket来实现一次连接跳出accept状态,之后就可以进行break等操作了
如while(true) {
serverSocket.accept()
if (....)
break;
..............
}
那么如果你的accept是运行在线程里的话,在main函数里可以采取一次本地连接: Socket socket = new Socket("127.0.0.1", port)来连接一次服务器使其能跳出accept阻塞,其中127.0.0.1是所有电脑都默认的本地ip, 所以是通用的不必担心
但如果你的accept是在主线程里,,如写在了main里,那只有强制return或直接在控制台关闭了
如果服务器长期属于待机状态,推荐把accept放在一个线程里来运行,这样主线程也能干别的事,没必要放在主线程里一直堵塞着干等着......