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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
#1

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

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

Добрый день

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

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

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

Пауза в цикле - Программирование Android
Народ, научите пожалуйста как сделать паузу в цикле... А то бьюсь бьюсь и ничего не выходит(( Не получаеца сделать паузу после каждой...

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

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

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

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

Пауза - ActionScript
Добрый день! Подскажите, как можно задать паузу, точнее какая команда для этого используется. Мне нужно чтобы ролик дойдя до определенного...

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

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

ps2/ помню когда делал нечто подобное, но на VB6, так там я обошелся банальным Sleep
verylazy
Заблокирован
16.08.2013, 21:50 #4
UDP пакеты вообще могут прийти получателю не в той последовательности как их отправляли или вообще могут не дойти и тот, кто их отсылал об этом даже не узнает никак.
Если идет опрос сервера и будет двухсторонний обмен данными то однозначно TCP.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.08.2013, 22:10 #5
в потоке запускаете цикл и между итерациями юзаете sleep.
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, объявил глобально
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2013, 10:25
Привет! Вот еще темы с ответами:

Пауза - C#
Здравствуйте) как реализовать паузу в плеере с помощью winmm.dll есть команда pause, которая вроде как останавливает...и команда...

Пауза - C#
Есть 2 метода один меняет label.Image на одну картинку, другой на другую. Не могу сделать между этитми методами паузу, чтобы взуально было...

Пауза - Visual Basic
Не без вашей помощи никак :drink: в общем, нужен скрипт паузы то есть, пример : Private Sub Form_Load() ' мой 1 код...

Ошибки в запросах - SQL Server
Здравствуйте. Помогите пожалуйста исправить ошибки. SELECT id_Должность Количество = COUNT(*) FROM Расписание WHERE ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.08.2013, 10:25
Ответ Создать тему
Опции темы

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