SocketChannel.write
とSocketChannel.read
を同時に2つの異なるスレッド(Android APIレベル25)で使用しようとしています。読み込み中にJava SocketChannelの書き込みがブロックされる
私はブロックモードとしてSocketChannelを設定しました。
// Make socketChannel.read() return after 500ms at most
socketChannel.socket().setSoTimeout(500);
while(!SHUTDOWN) {
int read = socketChannel.read(buffer);
if(read > 0){
// Do something nice
break;
}
}
と書き込みのために、私は各10秒のデータを書き込む:
は読書のために、私は、サーバーからすべてを読むために無限ループを作成しました。
問題は、時には(私は読書スレッドを各ループで短期間スリープさせる、例えば100msとすると、この問題は明らかに現れないことがわかった)読み込み中に書き込み操作がブロックされた。
AFAIK、TCP接続は、双方向動作を同時に提供できます。誰でもこれを説明できる?
'read()'メソッドが返す情報は完全に無視されています。それをしないでください。 – EJP
申し訳ありませんが、@EJP、これは私がループでデータを読み取っていることを示すためのデモです – MrROY
この質問をdownvoteする人がなぜ説明できるのはいいでしょう – MrROY