bufferedReader.read () блокируется, но только на некоторых устройствах - PullRequest
0 голосов
/ 14 декабря 2018

Я создал приложение для отправки данных на сервер, и сервер отвечает на ответ.Приложение отлично работает на всех устройствах Samsung.Я предполагал, что это было закончено, но затем я получил новый телефон, pocophone F1 от Xiaomi.Он работает 50/50 в первый раз, но во второй раз он блокируется в .read () / .readline () (ответ, содержащий / r / n).Затем запускается, чтобы попробовать другие, и это не работает также на huawei.

Как отладить, почему именно read () блокирует?

На Samsung это работает 100/100 раз.В других случаях он достигает 2/100 раз и намного медленнее достигает .read (), а не -1. ​​

Вопрос о сервере: (возможно, я делаю это неправильно) Должен ли я закрыть сокет послеотправляете ответ?(Я не хочу иметь живое соединение, просто запросите ответ, получите ответ.) В данный момент я закрываю сокет на стороне клиента, если закончил читать.(Но, как было сказано выше, иногда это никогда не заканчивалось и не доходило до .read ()).

1 Ответ

0 голосов
/ 14 декабря 2018

Как я понимаю - вы выполняете чтение из сокета в отдельном Thread - если нет - вам следует.После завершения чтения из сокета вы можете:

  • вызвать socket.close из другого потока - это разблокирует все потоки, заблокированные на read из сокета
  • прерываниенить - это сделает метод read для выброса InterruptedException - убедитесь, что вы обрабатываете его правильно

В качестве альтернативы - ваш сервер может закрыть соединение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...