Android のソケット ストリーム接続で奇妙な動作を認識しました。なぜJavaと違うのか知りたいです。
私の中で私はホストへの接続のためにとAsyncTask
を開きます。ホストがなくなったか、まだ利用可能かどうかを確認する方法に取り組んでいます。そのため、接続が利用可能かどうかを確認するスレッドを開始します。client socket
inputstream
bufferedreader
TCP
ホストがなくなった場合、スレッドは再接続の可能性のために asynctask のソケットを閉じます。それはうまく機能していて、誇りに思っていますが、今は難しい部分です。
Java ではソケットを閉じることができSocket.close()
、ブロックしている readline メソッドは例外によってキャッチされます。
Android ではSocket.shutdownInput()
、readline ブロックを壊してexception
. inputstream
( )を閉じようとしてもBufferedReader
、この場合は効果がないためです。ソケットを閉じても、readline はまだアクティブでブロックされています。
誰でもこの動作を説明できますか? 終了条件に固執する必要があることはわかっていますが、この動作は非常に異なります。
編集:リンクの yorkw への Thx。Froyo が私の電話で実行されているため、まったく同じ問題です。