32

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

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

4

3 回答 3

24

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

于 2012-06-05T14:49:02.300 回答
3

Socket.isClosed()并且Socket.isConnected()只告诉你套接字做了什么。他们不会告诉您有关连接状态的任何信息。你还没有关闭套接字:它是打开的。您连接了套接字:它已连接。

当您进行任何IOException操作Socket时,SocketTimeoutException您必须关闭套接字。

于 2012-06-06T00:33:37.787 回答
1

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

于 2020-08-12T21:27:46.527 回答