如何关闭一个正在accept的ServerSocket

在我的主线程中我有一个而(監听)循环,它在我的ServerSocket对象上调用 accept() 然后启动一个新的客户端线程,并在接受新客户端时将其添加到Collection

我还有一个Admin线程,我想用它来發出命令比如'exit',这将导致所有客户端线程被关闭关闭自己并关闭主线程,通过转向监听false

但是, accept()调用 while(监听)循环块似乎没有任何中断它的方法,因此无法再次检查while条件程序无法退出!

有更好的方法吗?或者某种方式来中断阻塞方法

你可以调用 来自另一个人線程和 调用将抛出 。

1:抛异常就抛呗你catch住不就行了。

2:如果你能确定哪个是最后一个client让client给它发给停止消息,让他不再继续accept

确定不了……
而且如果一个客户端都没连接就要关闭的情况,鼡您的方法显然不能解决……
什么意思你到底有什么需求,你打算什么时候关闭
对于可预见性的异常抛出处理这种方式应该没什么问題
ServerSocket不是一上去就开始执行accept()然后阻塞在accept()处了嘛,然后我关闭服务器但是此时还没有Client连接上,如果在别的地方调用close()由于另一個线程还在accept()所以会抛出异常吧?

本回答被提问者和网友采纳

你对这个回答的评价是

该楼层疑似违规已被系统折叠 

但問题是如果我程序要退出了就算把running设为false,accept也会卡在那里所以必须再接受一次连接程序才能退出。
如果我退出时直接关闭ServerSocket比如serverSocket.close()那么程序是可以马上结束,但是accept会抛异常结果就是每次结束程序都有异常。


我要回帖

 

随机推荐