С Новым годом! Форум программистов, компьютерный форум, киберфорум
Objective-C
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 16

Работа с сокетом и сворачивание приложения

05.09.2014, 22:10. Показов 1873. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В обработчике события таймера я периодически отправляю некие данные в строке string броадкастом примерно вот так:
Objective-C
1
2
3
4
    NSString * address = @"255.255.255.255";
    UInt16 port = 888888;
    NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
    [udpSocket sendData:data toHost:address port:port withTimeout:-1 tag:1];
Все отлично, пока я не сворачиваю свое приложение, нажав кнопку домой.
После запуска приложения событие таймера обрабатываются, но вот данные уже не отправляются.
Приходится убивать процесс и заново его запускать.
Как сделать так, чтобы сокет не зависал на методе sendData при сворачивании приложения?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2014, 22:10
Ответы с готовыми решениями:

Сворачивание и разворачивание приложения при обновлении || установка иконки приложения
1. Допустим у меня GUI свернут, мне нужно, что бы при обновлении GUI (добавились новые строки в текстовое поле) GUI разворачивался, и, если...

Совместимость процессора с 478 сокетом и материнской платы с 479 сокетом
Всем привет !! подскажите плизз будет похать проц с 478 сокетом на матке с 479 сокетом ?

Управление сокетом чужого приложения, как в WPE PRO
Доброго времени суток! Пытаюсь написать программу для отправки пакетов на сервер "от имени" игры (а точнее её socket'а). ...

4
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
06.09.2014, 06:04
Честно, не уверен на 100% насчет сокетов, но – как вариант, это запустить бэкграунд таск на фоне (относительно документациям работает не больше 10 минут)
Objective-C
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
@interface AppDelegate()
 
@property (nonatomic, assign) UIBackgroundTaskIdentifier bgTask;
 
@end
 
 
@implementation AppDelegate
 
@synthesize bgTask;
 
- (void)applicationWillResignActive:(UIApplication *)application
{
    self.bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
        [[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
        self.bgTask = UIBackgroundTaskInvalid;
    }];
    // do something
}
 
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (self.bgTask != UIBackgroundTaskInvalid)
    {
        [[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
        self.bgTask = UIBackgroundTaskInvalid;
    }
    // do something
}
 
// ...
 
@end
еще, как вариант, это копнуть в сторону targets (таргет проекта) -> capabilities -> background modes -> background fetch

p.s. если не ошибаюсь, то эта возможность доступна только в xcode >= 5
отличная фича
2
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 16
06.09.2014, 12:02  [ТС]
2 Vorona
targets (таргет проекта) -> capabilities -> background modes -> background fetch
Спасибо огромное, помогло!

Добавлено через 6 минут
Дополнение:
Помогло, если закрыл и снова открыл через непродолжительный отрезок времени.
Если же приложение запускается через большой промежуток - такая же история.
Может как-то можно определить, что приложение свернуто и убивать таймер? А потом, опять же, определять, что приложение запущено вновь и запускать таймер?

Добавлено через 4 минуты
Дополнение 2:
Причем дело-то не в таймере. В обработчике таймера происходит еще опрос акселерометра и тестовый вывод результатов на экран. Так вот это работает "как часы". А вот сокет перестает отправлять данные.
0
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
07.09.2014, 20:04
Цитата Сообщение от kostasoft Посмотреть сообщение
targets (таргет проекта) -> capabilities -> background modes -> background fetch
Спасибо огромное, помогло!
ага, тогда нужно еще немного кода дописать в AppDelegate, чтобы указать интервал, с которым будет вызываться fetch метод, и, собственно его реализацию (можете поискать статейки по запросу ios background fetch)
реализация метода performFetchWithCompletionHandler за вами
Objective-C
1
2
3
4
5
6
7
8
9
10
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
    return YES;
}
 
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    // implementation here
}
0
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 16
15.09.2014, 23:14  [ТС]
Вот ведь какая штука:
Я добавил проверку на статус приложения перед отправкой пакетов по UDP
Objective-C
1
2
if ([UIApplication sharedApplication].applicationState != UIApplicationStateBackground)
        [udpSocket sendData:data toHost:address port:port withTimeout:-1 tag:1];
И убрал автоблокировку экрана.
Теперь после сворачивания приложения (но при это сам телефон не блокируется) и последующего разворачивания через любой продолжительный период времени приложение после разворачивания работает отлично!
Но стоит заблокировать телефон (нажав однократно кнопку питания) - все, после разблокировки и разворачивания приложения UDP пакеты не отправляются, хоть само событие таймера, в котором это происходит - исправно срабатывает.
Как тут быть?

Добавлено через 4 часа 53 минуты
Я решил проблему!
Дело было в UDPsocket-е от Cocoa.
Реализовал передачу пакетов нативным сокетом (Беркли), все заработало.
Плагиатил вот отсюда!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.09.2014, 23:14
Помогаю со студенческими работами здесь

Работа с tcp сокетом
Добрый день. Возникла проблема при работе с сокетом. Есть клиент, который периодически отправляет данные, при чем неизвестно когда...

Работа с UDP сокетом
Доброго времени суток. При сборке проекта QT выдает следующие ошибки: 1. main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный...

Сворачивание приложения
Здравствуйте. Есть две формы: Главная Form1->FormStyle = fsStayOnTop; и вторичная (просто вторичная) открыта через Show(). Нужно...

Работа с неблокирующим сокетом в Linux
Создаю неблокирующий сокет, выполняю connect. В отдельном потоке с помощью select проверяется готовность сокета на запись, чтение и наличие...

Сворачивание приложения в трей
Всем привет, подскажите, как на C# написать сворачивание окна в трэй? Раньше у меня был проект написанный на VB вот код: /// написан...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru