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