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

use*_*117 30 networking android network-programming

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

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

Ben*_*den 21

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


use*_*421 5

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

当您进行任何其他IOException操作时,您必须关闭套接字。SocketSocketTimeoutException