Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
vitaha
0 / 0 / 0
Регистрация: 05.04.2015
Сообщений: 8
29.02.2016, 19:58     Read(). Как правильно прочитать из сокета? #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; /////// переходит сюда
        }
...

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

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

Android Как правильно передавать контекст
Как записать/прочитать картинку? Android
Android Как правильно парсить?
Вычитывание байтов из InputStream сокета Bluetooth Android
Android Как правильно сверстать в android
Как прочитать картинку с сервера по http? Android
Android Как при нажатии на кнопку прочитать определенную строку в текстовом файле?
Android Как прочитать db файл?
Android Как прочитать видео или картинку из личных сообщений вк?
Как прочитать личные сообщения в твиттере Android
Android Android.os.NetworkOnMainThreadException при создании сокета
Android Как правильно сделать SwipeLayout

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EVP
319 / 241 / 43
Регистрация: 14.12.2010
Сообщений: 461
01.03.2016, 20:48     Read(). Как правильно прочитать из сокета? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от vitaha Посмотреть сообщение
Прошу помощи. Может кто сталкивался.
Блютус соединение как-то рассматривали, но повторю для твоего случая:
Цитата Сообщение от EVP Посмотреть сообщение
5-ая строчка - кошмар, т.к. блокирующий вызов на countByte байт.
Т.е. вернётся он только когда countByte байт отсчитает. Если их передано меньше, то будет ждать пока лимит не наберётся.
Воспользоваться нужно available() для определения сколько есть доступных байтов.
И читать только сколько доступно, а не весь массив.
Но тут риск: пакет наполовину прочитать. Поэтому надо знать размер пакета.
Пример был тут.
Yandex
Объявления
01.03.2016, 20:48     Read(). Как правильно прочитать из сокета?
Ответ Создать тему
Опции темы

Текущее время: 01:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru