2012-02-02 17 views
1

アンドロイド2.3.3を使用して、私はソケット接続を持つバックグラウンドサービスを持っています。アンドロイドソケット書き込み中断読み取り

BufferedReader in = new BufferedReader(new InputStreamReader(mSock.getInputStream())); 
String line; 
while ((line = in.readLine()) != null) { 
    ... do stuff 
} 
// Socket has been closed (?) 
in.close(); 

そして、私が呼ぶ私のメインスレッドで:そこ連続ソケットから読んでいるスレッドです

private void writeSocket(String line) { 
    mSock.getOutputStream().write(line.getData("US-ASCII")); 
} 

私はwriteSocket、書き込みを(呼び出し時)例外をスローしませんが、私はドンもう一方の端のデータを見ることはできません。また、読み込みスレッドのin.readLine()は、write()が発生すると直ちにnullを返します。私が読んだところでは、異なるスレッドから同じソケットを同時に読み書きすることは安全でしょうか?書き込みがソケットを閉じる原因になっているようですが、例外はありません。

答えて

1

ほとんどの場合、接続のもう一方の端は正常に閉じられました。これにより、readwriteの両方が終了します。 (通常は例外ではありません。ファイルの最後を読み取るのと同じです。)異なるスレッドから同時に読み書きすることができます。ソケットが閉じた場合、通常であれ例外であれ、両方の操作は失敗します。

+1

はい、これは私の問題のようです。ソケットに悪いデータを書き込んでいるため、相手側の接続が切断されています。 – Aaron

関連する問題