【问题标题】:How to detect the server disconnection to the client immediately in Java(Android) socket communication如何在Java(Android)套接字通信中立即检测到服务器与客户端的断开连接
【发布时间】:2015-08-20 21:40:45
【问题描述】:

我正在从事套接字编程。有什么方法可以立即检测到服务器与客户端断开连接。

我使用了 socket.isConnected , isBound 方法,但我没有得到很好的结果。

我试图从流中连续读取数据进行检查,但它会阻止如果数据不可用或从服务器返回,我不想每次都写垃圾数据发送来检查与服务器的连接.

请提出任何建议。

【问题讨论】:

  • 你说的是 TCP 吗?还是 UDP?
  • 我说的是TCP套接字连接

标签: java android sockets


【解决方案1】:

这取决于您使用的套接字类型。即使这样,也不可避免地要为您的特定目的实施保活机制。

如果连接仍然存在,默认的 TCP 保持活动机制每 2 小时 (!) 检查一次。此默认值可以更改,但可能不起作用。见:

Does a TCP socket connection have a "keep alive"?

另一方面,UDP 是无状态的;没有联系。 socket.isConnected() 应该解释的上下文是它是否绑定到本地端口。

对于 UDP,绝对要求来回发送 ping/pong 以确定连接性。

希望对你有帮助。

【讨论】:

  • isConnected() for UDP 不表示任何关于本地端口的信息。它指示套接字是否连接到远程地址。
  • 这是不真实的......因为 UDP 是无状态的,所以永远不会与远程地址建立连接。在这方面,“连接”意味着 DatagramSocket 将简单地丢弃来自其他地址的任何传入数据报。从技术上讲,从来没有真正的联系。
猜你喜欢
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多