确切地说,“断管”异常对插座意味着什么?

时间:2012-06-05 14:39:16

标签: android networking network-programming

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

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

3 个答案:

答案 0 :(得分:21)

断管意味着你正在谈论的内容。您身边的程序仍然打开了插座,但另一侧的插座不再通信,并且没有通过标准的“关闭管道”程序。如果对方突然断电,如果物理线被切断,或其他什么,就会发生这种情况。因此,本地插座正在注册为打开和连接 - 它只是连接到断开的管道。您是否希望在此处提供一些实用建议,或仅仅是理论?

答案 1 :(得分:2)

Socket.isClosed()Socket.isConnected()只会告诉您套接字做了什么。他们不在那里告诉你任何关于连接的状态。您尚未关闭套接字:它已打开。您连接了套接字:它已连接。

如果您IOException Socket以外的任何SocketTimeoutException操作{{1}},则必须关闭套接字。

答案 2 :(得分:0)

当我尝试将Android App中的数据发送到连接到Arduino的蓝牙模块时遇到了同样的问题,我花了很长时间才用新的蓝牙模块更改了蓝牙模块,并且一切开始正常运行,因此也值得检查您的硬件,特别是如果您对代码充满信心并且解决方案用完了。