Я пытаюсь использовать SocketChannel.write
и SocketChannel.read
одновременно в двух разных потоках (Android API Level 25).
Я настроил 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 секунд.
Проблема в том, что я обнаружил, что иногда операции записи блокировались во время чтения.
Но если я заставлю поток чтения спать в течение короткого периода времени в каждом цикле, например. 100 мс, эта проблема больше не появится.
похоже, поток чтения блокирует поток записи
Насколько я знаю, TCP-соединения могут одновременно выполнять двунаправленные операции. Кто-нибудь может помочь объяснить это?
read()
. Не делай этого. - person user207421   schedule 14.05.2017