我的最后一个项目后,我有问题,客户端期望从服务器的对象,但在处理客户端输入一个异常,强制服务器出于安全原因关闭套接字被捕获。如何在发现异常后正确关闭套接字?
这会导致客户端以非常不愉快的方式终止,我决定处理这个问题的方式是在每次接收到输入后向客户端发送输入状态消息,以便他知道他的输入是否正确处理或者是否需要抛出异常。
所以我的问题:
- 有没有更好/更清洁的方式来关闭套接字的异常被捕获后?
我的最后一个项目后,我有问题,客户端期望从服务器的对象,但在处理客户端输入一个异常,强制服务器出于安全原因关闭套接字被捕获。如何在发现异常后正确关闭套接字?
这会导致客户端以非常不愉快的方式终止,我决定处理这个问题的方式是在每次接收到输入后向客户端发送输入状态消息,以便他知道他的输入是否正确处理或者是否需要抛出异常。
所以我的问题:
如果我理解正确,你已经关闭了服务器端的套接字,并且你需要你的客户端来实现这一点,并相应地处理错误。
查看Socket文档,特别是setSoTimeout
方法。例如,如果超时设置为5秒,并且客户端尝试从服务器套接字读取并且他没有得到答案,则超时将到期并引发一个java.net.SocketTimeoutException
,您可以捕获它并关闭套接字。
您也可以使用ScheduledExecutorService
或Timer
来模拟超时。
这样的事情:
你真的不能因为套接字被关闭,你可以听在客户端上
java.net.SocketException: socket closed
,然后你就会知道,你失去了与服务器的连接。
不正确,请参阅我的答案。你不能'听'异常,而且这个异常没有这个意义。 – EJP 2010-04-06 10:53:23
不正确。只有当您尝试使用您自己关闭的套接字时,才会发生此异常。
OP应该查找的是EOFException或IOException:'连接重置'或SocketTimeoutException。
谢谢,学到了新东西。 – Greg 2010-04-06 21:24:55
感谢您的回答,我已经这样做了,问题是如何与客户沟通他的对象不会来? – woolagaroo 2010-02-08 12:13:14