Java Socket断开连接报告与C#断开连接

4
在C#中,当套接字连接被终止时,在终止连接之前通知另一个节点,因此剩余的节点可以更新连接状态。
在Java中,当我终止通信链接时,另一个节点仍然报告连接有效。
我需要实现一个读取循环(有意义),以便在接收到读取-1时(在C#中是0,我认为)报告连接已丢失吗?
感谢您的见解。
编辑:感谢你们两个。正如我在帖子中所怀疑和提到的那样,需要进行额外的检查来确认连接状态。
2个回答

2

如果连接的远程端消失了,通常情况下,如果可以检测到断开连接,您将从InputStream/InputChannel中获得一个IOException。如果无法检测到断开连接,则最终会在套接字读取超时时抛出IOException。可以使用Socket.setSoTimeout()调整等待超时的时间。


0
在Java中,只有在读/写套接字或查询输入流状态(例如InputStream.available())时,您才会发现套接字的另一端已关闭。我认为没有任何异步通知表明另一端已关闭。
你如何测试套接字仍然打开?
您可以轮询InputStream.available()方法,如果返回-1,则知道套接字已关闭。当然,如果符合您的使用情况,您也可以读取数据。
请参见InputStream.available()

不,目前我只是在尝试一些想法。这个问题突出的原因是它的功能与C#不同。 - iTEgg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接