我有一个Android应用程序与PC上的程序对话。我正在使用Android(Java)Socket类。如果我下次从Android发送内容时停止并重新启动PC应用程序,我会收到IO Exception“Broken Pipe”。我的问题与此无关。这是问题:
如果我查询Socket的 isClosed()方法得到破坏的管道异常,它返回false(即,它没有关闭),如果我查询Socket的 isConnected()方法它返回true,即它是连接的。有人可以向我解释这些结果吗?提前谢谢!
答案 0 :(得分:21)
断管意味着你正在谈论的内容。您身边的程序仍然打开了插座,但另一侧的插座不再通信,并且没有通过标准的“关闭管道”程序。如果对方突然断电,如果物理线被切断,或其他什么,就会发生这种情况。因此,本地插座正在注册为打开和连接 - 它只是连接到断开的管道。您是否希望在此处提供一些实用建议,或仅仅是理论?
答案 1 :(得分:2)
Socket.isClosed()
和Socket.isConnected()
只会告诉您你对套接字做了什么。他们不在那里告诉你任何关于连接的状态。您尚未关闭套接字:它已打开。您连接了套接字:它已连接。
如果您IOException
Socket
以外的任何SocketTimeoutException
操作{{1}},则必须关闭套接字。
答案 2 :(得分:0)
当我尝试将Android App中的数据发送到连接到Arduino的蓝牙模块时遇到了同样的问题,我花了很长时间才用新的蓝牙模块更改了蓝牙模块,并且一切开始正常运行,因此也值得检查您的硬件,特别是如果您对代码充满信心并且解决方案用完了。