2012-06-05 13 views
28

私はPC上のプログラムと会話するアンドロイドアプリを持っています。私はAndroid(Java)Socketクラスを使用しています。私がAndroidから何かを送ったときにPCアプリを停止して再起動すると、IO例外 "Broken Pipe"が発生します。私の質問はそれに関するものではありません。ここで質問です:「破損したパイプ」の例外はSocketにとってどういう意味ですか?

私はソケットの閉じられます(照会すると壊れたパイプの例外を取得した後)私はソケットのをisConnectedを(クエリ場合には(すなわち、それは閉じられていない)falseを返し、方法)が返す方法は、真実である、すなわち、それは接続されている。誰かが私にこれらの結果を説明してもらえますか?前もって感謝します!

+0

http://stackoverflow.com/a/3751722/776244 –

+0

Samirさん、そのリンクは破損したパイプの例外の意味です。私はすでにそれを理解しています。それが私の質問がそれに関するものではないと言った理由です。私は2つのSocketメソッドから得ている戻り値を理解したい。これを明確にするためにタイトルを更新しました。 – user316117

答えて

18

壊れたパイプは、あなたがここで話しているものとほとんど同じです。あなたの側のプログラムはまだソケットが広く開いていますが、相手側のソケットはもはや通信しておらず、標準的な "close pipe"プロシージャを実行しませんでした。これは、相手側が突然電源を落とした場合や、物理回線が切断された場合などに発生します。そのため、ソケットはオープンで接続された状態でローカルに登録されています。破損したパイプに接続されているだけです。ここで実践的なアドバイスをしたいのですか?

+0

私は、通信チャネルを失ったときにソケットを照会できる何かがあるかどうかを知るためにSocketの応答を理解したかったのですが、2つの可能性の高い方法のようでした。それで、これは、パイプが壊れたときに、最初に私が持っている手掛かりが、「try-catch」ブロックの「キャッチ」部分に着陸して何かを送ることを意味しますか? – user316117

+0

かなり。壊れたパイプの全体のポイントは、ローカルで起こったことではないことです。システムには、起きたときに起きていることが通知されませんでした。 –

+0

私は同様の問題の王を持って、この投稿を見てくださいhttp://stackoverflow.com/questions/34728935/android-local-video-server – chandil03

1

Socket.isClosed()Socket.isConnected()は、ソケットに行ったことだけを伝えます。彼らは接続の状態について何も教えてくれません。あなたはソケットを閉じていません:開いています。あなたはソケットに接続しました。それは接続されています。

IOExceptionSocketSocketTimeoutException以外)または接続タイムアウト以外の場合は、ソケットを閉じる必要があります。

関連する問題