3 回答

TA贡献1793条经验 获得超6个赞
isConnected()
isClosed()
isConnected()
告诉你是否 你,你们已连接 这个插座..你有,所以它会返回真。 isClosed()
告诉你是否 你,你们已关闭 这个插座。在你找到之前,它会返回假的。 如果 同侪已关闭 连接有条不紊地 read()
报税表-1 readLine()
回报 null
readXXX()
抛出 EOFException
任何其他XXX。 一次书写就会抛出一个 IOException
:“由对等方重置连接”,最终会受到缓冲延迟的影响。 如果连接由于任何其他原因而中断,则写入将引发 IOException
,最终,就像上面一样,读可能会做同样的事情。 如果对等方仍然连接但不使用连接,则可以使用读取超时。 与你在其他地方读到的相反, ClosedChannelException
不会告诉你这个。[也不是 SocketException: socket closed.
它只告诉你 你,你们关闭 频道,然后继续使用。换句话说,您的编程错误。它并不表示已关闭。 连接。由于在WindowsXP上对Java 7进行了一些实验,因此,如果: 这意味着对等方已经重置了连接。然而,这可能是JRE版本或平台特有的。 你在选择 OP_READ
select()
返回大于零的值。 相关联 SelectionKey
已经无效( key.isValid() == false
)

TA贡献1998条经验 获得超6个赞
我已经读过,要实际确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是处理这种情况的一种非常不干净的方法。
您的本地系统可以在不通知您的情况下关闭您的套接字。这只是套接字的实现(也就是说,它不轮询硬件/驱动程序/固件/任何状态更改)。 新套接字(代理p).。有多个缔约方(实际上有6个端点)可能会关闭您的连接.
添加回答
举报