1

我目前正在使用 Java 中的套接字。我创建了一个监听器,它将连接到ServerSocket. 这工作得很好。但是,如果我的应用程序可能遇到意外关闭,则套接字将无法正确关闭。SocketException: socket closed在下一次运行时,这将引发socket = serversocket.accept();

但是,通过测试,serversocket.isBound()我发现它serversocket实际上是绑定的,因此没有关闭。我有什么办法可以确定我是否可以接受连接,如果不能,清除套接字并在此之后接受?

提前致谢。

4

1 回答 1

1

但是,如果我的应用程序可能遇到意外关闭,则套接字将无法正确关闭。在下一次运行时,这将抛出一个 SocketException: socket closed on socket = serversocket.accept();

你有那个从前到后。“套接字关闭”表示套接字关闭,而不是没有。

但是,通过使用 serversocket.isBound() 进行测试,我发现 serversocket 实际上是绑定的,因此没有关闭。

错误的。isBound() 告诉您是否曾经显式或隐式调用过 bind()。关闭套接字后,它不会更改返回的内容。如果您想知道套接字是否仍然打开,请尝试使用 isOpen() 或 isClosed(),无论是哪个。

你需要相信异常告诉你什么。您关闭了服务器套接字,所以现在您无法接受它。

我有什么办法可以确定我是否可以接受连接,如果不能,清除套接字并在此之后接受?

更重要的是修复套接字曾经关闭的错误。

于 2013-01-04T18:16:29.680 回答