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

Пауза в запросах - Программирование Android

16.08.2013, 16:56. Просмотров 903. Ответов 5
Метки нет (Все метки)

Добрый день

Делаю клиент-серверное приложение. Есть такая ситуация: клиент (на Android) должен опрашивать сервер (сейчас на Windows, в будущем будет на Arduino, хотя это и не принципиально) по UDP протоколу.
Так вот, когда клиент отправляет один запрос - все отлично, но как только я посылаю запросы в цикле, то получается билиберда: то сервер получает не корректные данные, то клиент недополучает.
Я так понимаю, что необходимо организовать некую паузу для отправки запросов, но как? Пробовал с Тридами, вообще ужас получается: приложение замирает на общую паузу между запросами...

Вобощем замучался уже... пример был бы кстати

ps/ еще один вопрос, пока что не сильно важный, как проверить доступно ли wifi соединение и как узнать свой IP на этом соединении?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2013, 16:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Пауза в запросах (Программирование Android):

Пауза в Android
Добрый день! Идея такова: пари нажатии на кнопку запускается анимация,...

Пауза в цикле
Народ, научите пожалуйста как сделать паузу в цикле... А то бьюсь бьюсь и...

Пауза в обрисовке OpenGL
Привет всем. Я нарисовал куб, который вращается движение пальца, запустил его,...

Нужно ли синхронизировать коллекцию при множественных асинхронных запросах?
Доброго дня. Ситуация следующая. В Activity стартую AsynkTask, который...

Таймер. Кнопка "Пауза"
Вобщем, решил попробовать сделать таймер, нашел статью, вроде все получилось,...

Пауза на 7 секунд или пауза до нажатия клавиши
Для загрузчика надо сделать паузу, длящуюся 7 секунд, во время которой, если...

5
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
16.08.2013, 17:45 #2
Цитата Сообщение от sirik2012 Посмотреть сообщение
то сервер получает не корректные данные, то клиент недополучает
ну все правильно, это же UDP если не принципиально - попробуйте TCP или POST/GET запросами. как в UDP делать паузы.. незнаю.
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
16.08.2013, 21:43  [ТС] #3
Не хочу делать POST/GET, так как особо различая я не вижу, точнее вижу, но как реализовать не знаю, да еще и парсить надо строки(.
Мне надо именно паузу, а в идеале каждый пакет был в отдельном потоке, но как это реализовать понятия не имею

ps/ если я шлю пакеты вручную через небольшие паузы, то все отлично, а вот в автомате, без пауз, никак((

ps2/ помню когда делал нечто подобное, но на VB6, так там я обошелся банальным Sleep
0
verylazy
Заблокирован
16.08.2013, 21:50 #4
UDP пакеты вообще могут прийти получателю не в той последовательности как их отправляли или вообще могут не дойти и тот, кто их отсылал об этом даже не узнает никак.
Если идет опрос сервера и будет двухсторонний обмен данными то однозначно TCP.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.08.2013, 22:10 #5
в потоке запускаете цикл и между итерациями юзаете sleep.
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
17.08.2013, 10:25  [ТС] #6
Дело в том, что TCP в чистом виде я не могу использовать, так как в будущем планируется несколько клиентов, а сервер будет построен на Arduino. А на нем, я не знаю как построить данную реализацию.
При UDP действительно может произойти все что угодно, но я контролирую процесс получения пакетов, так сказать отправляю eco на каждый посланный пакет, в принципе все устраивает.

2 V0v1k: а можно пример? я сейчас делаю так: при клике кнопки вызываю внешнюю процедуру, которая в цикле отправляет запросы. я так понимаю, что надо процедуру отправки вынести в отдельный поток, но как?

Добавлено через 45 минут
Вот пример кода:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        Thread background = new Thread (new Runnable() {
           public void run() {
               try {
                   for (int i = 1; i<=2; i++){
                       send_msg ("12345,0," + i + ",0");
                       
                       Thread.sleep(100);
                   }
               } catch (java.lang.InterruptedException e) {
                   // if something fails do something smart
               }
           }
        });
        background.start();
send_msg ("12345,0," + i + ",0"); - процедура отправки сообщений, но как только вызывается поток происходит пауза, и на сервер вообще ничего не доходит(

Добавлено через 19 минут
В общем я понял в чем моя ошибка) вот окончательный код:
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
      Thread background = new Thread (new Runnable() {
           public void run() {
               try {
                   
                   while (indexSendMessage < 2) {
 
                       progressHandler.sendMessage(progressHandler.obtainMessage());
                       
                       Thread.sleep(500);
                   }
               } catch (java.lang.InterruptedException e) {
                   // if something fails do something smart
               }
           }
        });
        background.start();     
};
 
 
Handler progressHandler = new Handler() {
    public void handleMessage(Message msg) {
        indexSendMessage++;     
        send_msg ("12345,0," + indexSendMessage + ",0");
    }
};
переменную indexSendMessage, объявил глобально
0
17.08.2013, 10:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2013, 10:25
Привет! Вот еще темы с решениями:

Разница в запросах к бд ?
Подскажите что больше грузит систему ? такой запрос : ...

Переменные в запросах
Есть обычный запрос, который выбирает записи из таблицы. Для каждой строки...

Зависает на запросах
Подскажите пожалуйста, выдает ошибку. Программа каждую секунду проверяет...

Ошибки в запросах
Здравствуйте. Помогите пожалуйста исправить ошибки. SELECT id_Должность...


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

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

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