Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
vitaha
0 / 0 / 0
Регистрация: 05.04.2015
Сообщений: 8
#1

Read(). Как правильно прочитать из сокета? - Программирование Android

29.02.2016, 19:58. Просмотров 247. Ответов 1
Метки нет (Все метки)

День добрый! Не могу понять почему read() пролетает не дождавшись каких либо данных .Код ниже

...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 if (сокет есть соединение) {                                                                  // шаг 1
               byte[] arrByte = new byte[countByte];  //////// к примеру countByte = 8     // шаг 2
            
            try {
                inStream.read(arrByte);                                                       // шаг 3
            } catch (IOException e) {
    
            } catch (Exception e) {
 
            }
        
            return arrByte;
        } else {
            return null; /////// переходит сюда
        }
...
http://www.cyberforum.ru/android-dev/thread1898946.html

Сейчас самое интересное!) иду дебагом по коду он у меня проходит все три шага, которые я описал в строчкаx кода и потом переходит в последний - return() /////// переходит сюда что вообще должно срабатывать если нет соединения
Если что-то по данным есть, то возвращает нормально, а вот если нет твориться такая каша...
Прошу помощи. Может кто сталкивался. setsotimeout не помог.
Весь этот код в бесконечном цикле

Спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.02.2016, 19:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Read(). Как правильно прочитать из сокета? (Программирование Android):

Как прочитать все из сокета?
Никто не подскажет, как прочитать полностью все данные из сокета? Т.е....

PHP - как открыть/прочитать файл из сокета через прокси сервер
не знаю правильно ли я выразился..., я имел ввиду как прочитать в переменную...

Как правильно создать объект сокета?
QTcpSocket* socket=new QTcpSocket(); На эту строчку ругается компилятор так:...

Прочитать несколько байт с сокета
Здравствуйте, уважаемые форумчане. Вопрос у меня следующий. ...

Как правильно прочитать текс?
device Atmega128 .include “m128def.inc” ldi r16,High(RAMEND) ...

1
EVP
489 / 257 / 57
Регистрация: 14.12.2010
Сообщений: 515
01.03.2016, 20:48 #2
Лучший ответ Сообщение было отмечено vitaha как решение

Решение

Цитата Сообщение от vitaha Посмотреть сообщение
Прошу помощи. Может кто сталкивался.
Блютус соединение как-то рассматривали, но повторю для твоего случая:
Цитата Сообщение от EVP Посмотреть сообщение
5-ая строчка - кошмар, т.к. блокирующий вызов на countByte байт.
Т.е. вернётся он только когда countByte байт отсчитает. Если их передано меньше, то будет ждать пока лимит не наберётся.
Воспользоваться нужно available() для определения сколько есть доступных байтов.
И читать только сколько доступно, а не весь массив.
Но тут риск: пакет наполовину прочитать. Поэтому надо знать размер пакета.
Пример был тут.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2016, 20:48
Привет! Вот еще темы с решениями:

Как правильно прочитать данные?
Как правильно прочитать данные? "ER-200" 06:43 10:40 "Red Arrow" 23:55 07:55...

Как правильно прочитать объявление?
Как правильно прочитать данную конструкцию ((unsigned char*)(&a)) ? Вот...

Как правильно прочитать InputStream?
На сервер приходит HTTP запрос нужно как то его прочитать. public void run()...

Как правильно прочитать конструкцию?
LEA EDX,DWORD PTR SS: как это правильно читается можно по подробней...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru