У меня есть простой 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.