С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331

Не срабатывает код после цикла

19.04.2016, 16:38. Показов 606. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот полный код потока
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class ClientThread implements Runnable {
 
        @Override
        public void run() {
 
            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
 
                socket = new Socket(serverAddr, SERVERPORT);
                PrintWriter outprint = new PrintWriter(new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))),
                        true);
                //DataInputStream in;
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
                //int read = 0;
                int read = 0;
                //in = new DataInputStream(socket.getInputStream());
               // out=new DataOutputStream(socket.getOutputStream());
                //out.writeInt(x);
                outprint.println(STX);
                //out.writeChar(STX);
                outprint.flush();
               // BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                char[] mData = new char[28];
 
 
                    while ((read = reader.read(mData)) > 0) {
                        synchronized (this) {
                            wait(3000);
                        }
                        // Thread.sleep(3000);
 
                        String str = String.valueOf(mData);
 
                        Log.d("Func", str);
                        Log.d("Func", "" + read);
                    }
                Log.d("Func", "Yes"); //                            этот код не срабатывает
 
 
 
                //String message = in.readUTF();
 
//                Toast toast = Toast.makeText(getApplicationContext(),
                       // message, Toast.LENGTH_SHORT);
              //  toast.show();
 
 
            } catch (UnknownHostException e1) {
                Log.d("Func", "Host");
                e1.printStackTrace();
            } catch (IOException e1) {
                Log.d("Func", "No");
                e1.printStackTrace();
            }
        catch (Throwable throwable) {
            Log.e("Func", "No1");
            throwable.printStackTrace();
        }/*catch (InterruptedException e) {
                e.printStackTrace();
            }*/ /*catch (InterruptedException e) {
                Log.d("Func", "Interrupt");
                e.printStackTrace();
            }*/
 
        }
 
    }
Log.d("Func", str);
Log.d("Func", "" + read); срабатывает а Log.d("Func", "Yes");. Подскажите почему такое происходит? Как можно исправить? Ни один catch не срабатывает, в чем может быть проблема? Поток запускается в методе onCreate() активити.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2016, 16:38
Ответы с готовыми решениями:

Почему не срабатывает изменение границы цикла, принятое внутри цикла?
Работает цикл for-Next V_Rod = UBound(Rod, 2) For j = 1 To V_Rod For k = 1 To UBound(BD, 2) ReDim...

Не выполняется код после цикла
Всем доброго времени суток. 2 дня назад я решил серьёзно взяться за изучение С. По совету многих знакомых читаю Кернигана и Ритчи. У меня...

Не работает код после цикла
Доброго времени суток, в этом коде программа игнорирует все что написано после первого цикла. Ставил точку остановки на второй цикл - не...

5
 Аватар для Frozik6k
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
 Аватар для Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
21.04.2016, 10:59
Попробуй установить тайм аут для сокета, ну скажем в 3000 миллисекунд
Java
1
socket.setSoTimeout(3000);
может тогда через это время read() бросит SocketTimeoutException.
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
21.04.2016, 12:02  [ТС]
Это я уже решил делать надо просто чтение в отдельном потоке(чтение - блокирующая операция). А кстати такой вопрос socket.setSoTimeout(socket.setSoTimeout( 3000);
); - просто переводит сокет в режим ожидания на заданное время? То есть если в течение того времени которое передаешь в таймаут ответ от сервера не пришел, то можно считать что где то был разрыв соединения так да? Правда еще IoException срабатывает в случае разрыва.
0
 Аватар для Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
21.04.2016, 13:38
А еще новичок в программировании, и с сокетами не работал, так что точно не знаю как срабатывает socket.setSoTimeout. Это надо экспериментальным путем выяснить. Может покажусь совсем зеленым дилетантом, но может какую-нибудь завершающую последовательность данных отправлять, а при нахождении данной последовательности, прекращать чтение данных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2016, 13:38
Помогаю со студенческими работами здесь

После многих итераций цикла вылетает код
Цикл, каждые 5 секунд проверяется txt из Интерента. Если он имеет определённое содержание, запускается окно. После примерно полчаса-час...

После добавления цикла и условий перестал работать код
Здравствуйте! Очень нужна ваша подсказка. Накорябал вот такой код: <script src="http://yandex.st/jquery/1.6.4/jquery.min.js"...

после цикла for код останавливается без предупреждений об ошибке
Здравствуйте! Изучаю vb.net 2010. Прошу помощи в одном вопросе: есть два listbox, 2й (lbЗначения) заполняется из БД в зависимости от...

Что нужно добавить в код, чтоб он сразу не закрывался после завершения цикла
Здравствуйте,подскажите пожалуйста, что нужно добавить в код, чтоб он сразу не закрывался после завершения цикла, и чтоб его предыдущие...

Gets() не срабатывает во время цикла
# include <stdio.h> #include <cstdio> #include <string.h> #include<iostream> char s1; int k,i,j,po,r; bool kk; void stroka() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Изучаю 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru