Фоновые розетки iphoneOS - PullRequest
       3

Фоновые розетки iphoneOS

1 голос
/ 23 декабря 2011

У меня есть простой TCP-клиент, который подключается к простому TCP-серверу, отправляя слово «ping» каждые 5 секунд.Я читаю эти «пинги» с помощью команды чтения из стандартной библиотеки сокетов C.

int numberOfBytes = read(m_clientSocketFileDescriptor,buffer,255);
if (numberOfBytes < 0) { 
    error("reading from socket");
}

Я установил значения использования WIFI, фонового звука и фонового voip в моем файле plist приложения.Я заявляю, что мое гнездо имеет фоновое изображение следующим образом:

 - (void)applicationWillEnterForeground:(UIApplication *)application
 {
   if (m_clientSocketFileDescriptor) {
         CFStreamCreatePairWithSocket(kCFAllocatorDefault, m_clientSocketFileDescriptor, &m_tcpReadStream, nil);
         if (m_tcpReadStream != NULL) {
         CFReadStreamSetProperty(m_tcpReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
         }
    }
  }

Это прекрасно работает, когда я нажимаю кнопку возврата домой.Мои пинг получены с сервера, и когда я просыпаюсь с приложением, все сообщения были получены.Моя проблема, когда я использую кнопку питания, чтобы заблокировать экран iPhone.Розетка на самом деле закрыта.Мой сервер получает ошибку SIGPIPE, и когда я просыпаюсь с телефоном, функция read () говорит: «Сокет не подключается».

Я думаю, что довольно глупо иметь фоновый сокет, если это происходитвниз, когда пользователь блокирует экран (по умолчанию это происходит через 1 или 5 минут), поэтому, возможно, я делаю что-то неправильно.

Кому-нибудь удалось преодолеть эту проблему?Протестировано на iOS 5.0 с iPhone 3GS и iPhone 4.

1 Ответ

1 голос
/ 23 декабря 2011

Возможно, вам потребуется использовать - [UIApplication setKeepAliveTimeout: handler:] . Я предполагаю, что если у вас нет этого обработчика, ОС может предположить, что ваше приложение не сможет обработать какие-либо ответы на сокет, и закроет его. См. Также Советы Apple по разработке приложения VoIP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...