在 C# 中,当套接字连接终止时,另一个节点会在终止链接之前收到通知,因此 remaning 节点可以更新连接状态。
在 Java 中,当我终止通信链接时,另一个节点不断报告连接为有效。
我是否需要实现一个读取周期(有意义),当它在读取期间收到 -1 时报告连接丢失(在 C# 中,我认为这是 0)?
感谢您的见解。
编辑:谢谢你们俩。正如我在帖子中怀疑并提到的那样,需要进行额外检查才能确认连接的连接状态。
在 C# 中,当套接字连接终止时,另一个节点会在终止链接之前收到通知,因此 remaning 节点可以更新连接状态。
在 Java 中,当我终止通信链接时,另一个节点不断报告连接为有效。
我是否需要实现一个读取周期(有意义),当它在读取期间收到 -1 时报告连接丢失(在 C# 中,我认为这是 0)?
感谢您的见解。
编辑:谢谢你们俩。正如我在帖子中怀疑并提到的那样,需要进行额外检查才能确认连接的连接状态。
如果连接的远程端消失,通常如果可以检测到断开连接,您将从 InputStream/InputChannel 获得 IOException。如果它无法检测到断开连接,则最终会在套接字读取超时时抛出 IOException。可以使用 Socket.setSoTimeout() 调整等待超时的时间长度。
在Java 中,只有在对套接字进行读/写或查询输入流状态(例如InputStream.available()
)时,才会发现套接字的另一端正在关闭。我认为没有任何异步通知表明另一端已关闭。
你如何测试套接字仍然打开?
您可以轮询该InputStream.available()
方法,如果返回 -1,您就知道套接字已关闭。当然,如果适合您的使用情况,您也可以读取数据。