插座因意外关闭而关闭

时间:2013-01-04 14:57:45

标签: java sockets

我目前正在使用Java中的套接字。 我创建了一个连接到ServerSocket的侦听器。这完全没问题。但是,如果我的应用程序可能会遇到意外关闭,则套接字将无法正常关闭。下次运行时,这将在SocketException: socket closed

上抛出socket = serversocket.accept();

然而,通过使用serversocket.isBound()进行测试,我发现serversocket实际上是绑定的,因此没有关闭。有没有办法让我确定是否可以接受连接,如果没有,清除套接字并在此之后接受?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

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

上关闭

你已经回到了前面。 '套接字关闭'表示套接字 已关闭,而不是它已关闭。

  

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

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

您需要相信异常告诉您的内容。您已关闭服务器套接字,因此现在无法接受它。

  

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

更重要的是要解决套接字首先关闭的错误。