【发布时间】:2014-08-25 18:41:49
【问题描述】:
多年来,我一直想知道在 Java 中关闭侦听 ServerSocket 的正确方法是什么。我的实现总是这样工作,他们:
- 创建一个新的 ServerSocket(int)。
- 在 while (true) 循环中启动一个调用其 accept() 方法的线程。
- 当 accept() 返回(客户端连接)时启动另一个线程,该线程从客户端读取直到断开连接。然后,accept 线程继续另一个 accept() 调用。
但是当我因为我的应用程序正在退出而想关闭 ServerSocket 时,除了调用它的 close() 方法(在我关闭所有客户端套接字之后)之外,我从未找到其他方法,这会导致 accept( ) 抛出一个 SocketException,我捕获它并从接受线程中的 while (true) 循环中中断,导致我的所有线程退出。
我认为这很难看,严格来说没有发生异常,关闭我的ServerSocket是我程序正常操作的一部分。
真的没有其他方法可以在不引发异常的情况下做到这一点吗?
谢谢。
【问题讨论】:
标签: java multithreading exception connection serversocket