【问题标题】:Java Socket Disconnect Reporting vs. C# DisconnectionJava Socket 断开连接报告与 C# 断开连接
【发布时间】:2010-05-10 18:54:48
【问题描述】:

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

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

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

感谢您的洞察力。

编辑:谢谢你们俩。正如我在帖子中所怀疑并提到的那样,需要进行额外检查才能确认连接的连接状态。

【问题讨论】:

    标签: c# java sockets disconnect


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      您如何测试套接字是否仍然打开?

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

      InputStream.available()

      【讨论】:

      • 不,目前我正在玩弄想法。这个问题很突出,因为它的功能与 C# 不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 2020-09-20
      • 2022-07-08
      • 2012-11-08
      • 2021-07-30
      相关资源
      最近更新 更多