首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何中断ServerSocket accept()方法?

如何中断ServerSocket accept()方法?
EN

Stack Overflow用户
提问于 2010-06-06 18:21:35
回答 4查看 105K关注 0票数 160

在我的主线程中,我有一个while(listening)循环,它在我的ServerSocket对象上调用accept(),然后启动一个新的客户机线程,并在新的客户机被接受时将其添加到集合中。

我还有一个管理线程,我想用它来发出命令,比如'exit',这将导致所有客户端线程关闭,关闭自身,并通过将侦听设置为false来关闭主线程。

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

有没有更好的方法来做这件事?或者以某种方式中断阻塞方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-06 18:27:31

您可以从另一个线程调用close()accept()调用将抛出一个SocketException

票数 170
EN

Stack Overflow用户

发布于 2018-02-21 00:11:35

票数 1
EN

Stack Overflow用户

发布于 2013-12-02 07:06:20

你可以尝试的另一件更干净的事情是检查接受循环中的一个标志,然后当你的管理线程想要终止在接受时阻塞的线程时,设置该标志(使其线程安全),然后建立到侦听套接字的客户端套接字连接。accept将停止阻塞并返回新的套接字。您可以制定一些简单的协议,告诉侦听线程干净地退出线程。然后在客户端关闭套接字。没有例外,干净多了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2983835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档