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

时间:2010-05-10 18:54:49

标签: c# java sockets disconnect

在C#中,当套接字连接终止时,在终止链接之前会通知另一个节点,因此重新获取节点可以更新连接状态。

在Java中,当我终止通信链接时,另一个节点继续将连接报告为有效。

我是否需要实现一个读取周期(有意义),在读取期间收到-1时报告连接丢失(在C#中我认为这是0)?

谢谢你的见解。

编辑:谢谢你们俩。正如我怀疑并在我的帖子中提到的那样,需要进一步检查以确认连接的连接状态。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

在java中,只有在读取/写入套接字或从套接字读取或查询输入流状态(例如InputStream.available())时,才会发现套接字的另一端正在关闭。我认为没有任何异步通知表示另一端已关闭。

您如何测试套接字是否仍处于打开状态?

您可以轮询InputStream.available()方法,如果返回-1,则表示套接字已关闭。当然,如果符合您的使用情况,您也可以阅读数据。

请参阅InputStream.available()