C# Java套接字断开连接报告与C断开连接

C# Java套接字断开连接报告与C断开连接,c#,java,sockets,disconnect,C#,Java,Sockets,Disconnect,在C#中,当套接字连接终止时,在终止链路之前会通知另一个节点,因此发回的节点可以更新连接状态 在Java中,当我终止一个通信链接时,另一个节点会继续报告该连接是有效的 我是否需要实现一个读取周期(有意义),当它在读取过程中接收到-1时报告连接丢失(在C中,我认为这是0) 谢谢你的洞察力 编辑:谢谢你们两位。正如我在帖子中怀疑并提到的,需要进行额外的检查以确认连接的连接状态。在java中,只有在读取/写入套接字或查询输入流状态(例如,InputStream.available())时,才能发现套接

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

在Java中,当我终止一个通信链接时,另一个节点会继续报告该连接是有效的

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

谢谢你的洞察力


编辑:谢谢你们两位。正如我在帖子中怀疑并提到的,需要进行额外的检查以确认连接的连接状态。

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

您如何测试插座是否仍然打开

您可以轮询
InputStream.available()
方法,如果返回-1,您就知道套接字已关闭。当然,如果适合您的使用,您也可以读取数据


请参见

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

不,目前我正在玩弄各种想法。这个问题很突出,因为它的功能与C#不同。