捕获异常后如何正确关闭套接字?

时间:2010-02-08 12:01:24

标签: java exception-handling sockets

在我的上一个项目之后,我遇到了客户端期望来自服务器的对象的问题,但在处理客户端输入时,出于安全原因强制服务器关闭套接字的异常被捕获。

这会导致客户端以非常不愉快的方式终止,我决定处理此问题的方式是在每次收到的输入后向客户端发送一个输入状态消息,以便他知道他的输入是否已正确处理或是否需要抛出异常。

所以我的问题:

  • 捕获异常后是否有更好/更清晰的方法来关闭套接字?

4 个答案:

答案 0 :(得分:2)

对于这样的事情:

  1. 确保将此套接字代码放在try / catch块中。
  2. 在'finally'中关闭套接字。这样,无论是否存在异常,都可以确保干净地关闭套接字。

答案 1 :(得分:2)

如果我理解正确,您已经从服务器端关闭了套接字,并且您需要客户端实现此功能并相应地处理错误。

查看Socket文档,特别是setSoTimeout方法。例如,如果超时设置为5秒并且客户端尝试从服务器套接字读取并且他没有得到答案,则超时到期并且引发java.net.SocketTimeoutException并且您可以捕获它并关闭插座。

您还可以使用ScheduledExecutorServiceTimer来模拟超时。

答案 2 :(得分:1)

不正确的。只有当您尝试使用自己关闭的 时,才会出现该异常。

OP应该寻找的是EOFException或IOException:'connection reset',或者SocketTimeoutException。

答案 3 :(得分:0)

你真的不能,因为套接字已经关闭,你可以在客户端上监听

java.net.SocketException: socket closed 

然后你会知道你丢失了与服务器的连接。