|
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
|
||||||
Не срабатывает код после цикла19.04.2016, 16:38. Показов 606. Ответов 5
Метки нет (Все метки)
вот полный код потока
Log.d("Func", "" + read); срабатывает а Log.d("Func", "Yes");. Подскажите почему такое происходит? Как можно исправить? Ни один catch не срабатывает, в чем может быть проблема? Поток запускается в методе onCreate() активити.
0
|
||||||
| 19.04.2016, 16:38 | |
|
Ответы с готовыми решениями:
5
Не выполняется код после цикла Не работает код после цикла |
|
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
|
|
| 20.04.2016, 08:22 | |
|
А переменная read вообще принимает значение -1 ?
0
|
|
|
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
|
|
| 20.04.2016, 11:20 [ТС] | |
|
да принимает но дело не в этом я и меньше нуля пробовал и по разному. Проблему решает только вызов clientSocket->disconnectFromHost(); на стороне Qt сервера(то есть разрыв соединения) тогда код после цикла выполняется. Но я не могу понять почему так? Получается BufferedReader слушает сокет постоянно(блокирует дальнейшие действия). Просто если я хочу отправить на сервер данные, затем получить ответ, затем опять что то отправить - то мне получается нужно вешать BufferedReader на сокет, а в отдельном потоке делать отправку данных на сервер(или другие действия не связанные с чтением) или же вызывать disconnect на сервере. Но это не очень удобно. Хочется все делать в одном не главном потоке и при одном установленном соединении. Может в Java есть концепция неблокирующих сокетов(которые не блокируют выполнение кода)?
Добавлено через 36 минут можете обьяснить следующее. Когда я делаю без цикла read = reader.read(mData); и данные в канале есть для чтения, то все норм я получаю ответ от сервера, вывожу количество бай прочитанных, дальше код выполняется все отлично, но если я вызываю read = reader.read(mData); второй раз и данных в канале уже нет(ответ получен), то я не могу даже вывести переменную read и дальше код не выполняется, происходит как бы блокировка выполнения кода То есть если данных для чтения нету то BufferedReader переходит как бы в режим ожидания этих данных так получается? То есть получается как бы блокирующий сокет да? А сокет можно перевести в неблокирующий режим в андроид. Просто интересно? То есть если вызвать reader.read(mData); и данных в канале нет то код дальше блокируется не знаете почему?
0
|
|
|
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
|
||||||
| 21.04.2016, 10:59 | ||||||
|
Попробуй установить тайм аут для сокета, ну скажем в 3000 миллисекунд
0
|
||||||
|
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
|
|
| 21.04.2016, 12:02 [ТС] | |
|
Это я уже решил делать надо просто чтение в отдельном потоке(чтение - блокирующая операция). А кстати такой вопрос socket.setSoTimeout(socket.setSoTimeout( 3000);
); - просто переводит сокет в режим ожидания на заданное время? То есть если в течение того времени которое передаешь в таймаут ответ от сервера не пришел, то можно считать что где то был разрыв соединения так да? Правда еще IoException срабатывает в случае разрыва.
0
|
|
|
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
|
|
| 21.04.2016, 13:38 | |
|
А еще новичок в программировании, и с сокетами не работал, так что точно не знаю как срабатывает socket.setSoTimeout. Это надо экспериментальным путем выяснить. Может покажусь совсем зеленым дилетантом, но может какую-нибудь завершающую последовательность данных отправлять, а при нахождении данной последовательности, прекращать чтение данных.
0
|
|
| 21.04.2016, 13:38 | |
|
Помогаю со студенческими работами здесь
6
После многих итераций цикла вылетает код После добавления цикла и условий перестал работать код после цикла for код останавливается без предупреждений об ошибке Что нужно добавить в код, чтоб он сразу не закрывался после завершения цикла Gets() не срабатывает во время цикла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|