我在客户端应用程序中使用Java Socket对象.我需要知道到服务器的线路何时断开,或者是否有任何事件导致套接字失效.
我看到两种方法:
>写入或读取套接字时捕获SocketException,考虑到这些异常会杀死套接字
>捕获这些异常时,请检查Socket.isClosed()方法以了解其是否杀死了套接字
这些方法中的任何一种是否可以保证即使套接字上的临时问题已解决,我也知道套接字何时失效并且无法再次使用?
除了在套接字上执行操作时抛出的(Socket)Exception来暗示该套接字已死的情况之外,我们可以吗?
有更好的方法知道这一点吗?
解决方法:
至少:
>从Socket.setSoTimeout()javadoc接收到异常并不意味着套接字总是死的:
If the timeout expires [on a read for instance, a java.net.SocketTimeoutException is raised, though the Socket is still valid.
>套接字的关闭标志似乎仅在调用Socket.close()方法时设置,因此我不会依赖它.