Androidアプリがあります。Android(Java)Socketクラスを使用しています。停止して再起動すると、次回Androidから何かを送信するときのPCアプリIO Exception "Broken Pipe"。私の質問はそれについてではありません。ここに質問があります:
ソケットのisClosed()メソッドをクエリすると壊れたパイプ例外が発生した後、falseを返します(つまり、閉じていません)。また、ソケットのisConnected()メソッドをクエリするとそれは真を返します、つまり、IS接続されています。誰かがこれらの結果を私に説明してくれませんか?よろしくお願いします!
壊れたパイプは、ここで話していることとほぼ同じ意味です。あなたの側のプログラムはまだソケットを大きく開いていますが、反対側のソケットは通信しておらず、標準の「パイプを閉じる」手順を実行していません。これは、反対側が突然電源を失った場合、物理的な回線が切断された場合などに発生します。そのため、ローカルでソケットはオープンと接続の両方として登録されています-壊れたパイプに接続されているだけです。ここで実用的なアドバイスを望みましたか、それとも理論だけですか?
Socket.isClosed()
およびSocket.isConnected()
は、あなたがsocket。接続の状態について何かを伝えるためのものではありません。ソケットを閉じました:開いています。ソケットを接続しました。接続されています。
IOException
以外のSocket
を操作してSocketTimeoutException
を取得した場合は、ソケットを閉じる必要があります。