【问题标题】:What, exactly, does a "broken pipe" exception mean to the Socket?确切地说,“断管”异常对 Socket 意味着什么?
【发布时间】:2012-06-05 14:39:15
【问题描述】:

我有一个与 PC 上的程序对话的 Android 应用程序。我正在使用 Android (Java) Socket 类。如果我下次从 Android 发送内容时停止并重新启动 PC 应用程序,我会收到 IO 异常“Broken Pipe”。我的问题与此无关。问题来了:

如果我查询 Socket 的 isClosed() 方法得到了损坏的管道异常,它会返回 false(即它没有关闭),如果我查询 Socket 的 isConnected() em> 方法它返回 true,即它已连接。有人可以向我解释这些结果吗?提前致谢!

【问题讨论】:

  • Samir,该链接是关于损坏管道异常的含义。我已经明白了;这就是为什么我说我的问题与此无关。我想了解我从两个 Socket 方法获得的返回值。我更新了标题以澄清这一点。

标签: android networking network-programming


【解决方案1】:

Broken pipe 的意思与您在此处所说的差不多。你这边的程序仍然打开它的套接字,但是另一边的套接字不再通信,并且没有经过标准的“关闭管道”程序。如果对方突然断电、物理线路被切断或其他情况,就会发生这种情况。因此,套接字在本地注册为打开和连接 - 它只是连接到损坏的管道。您希望在这里得到一些实用的建议,还是只是理论?

【讨论】:

  • 我想了解 Socket 的响应,以了解我是否可以查询套接字以了解我何时失去了通信通道,而这似乎是两种最可能的方法。那么这是否意味着当管道破裂时,当我发送某些东西时,我将获得的第一个线索是降落在“try-catch”块的“catch”部分?
  • 差不多。损坏管道的全部意义在于它不是本地发生的任何事情,并且您的系统在它发生时没有被告知它正在发生。
【解决方案2】:

Socket.isClosed()Socket.isConnected() 只告诉你 socket 做了什么。 他们不会告诉你关于 的状态的任何事情。 em>connection. 你还没有关闭套接字:它是打开的。您连接了套接字:它已连接。

当您得到任何IOException 操作Socket 而非SocketTimeoutException 时,您必须关闭套接字。

【讨论】:

    【解决方案3】:

    当我尝试将数据从我的 Android 应用程序发送到连接到 Arduino 的蓝牙模块时,我遇到了同样的问题,我花了很长时间才用新的蓝牙模块更换了蓝牙模块,一切都开始正常工作,所以检查你的硬件也是值得的,特别是如果你对你的代码有信心并且没有解决方案。

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2014-03-17
      • 2015-10-29
      • 2012-10-10
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多