2011-12-23 3 views
1

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

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

Я установил использование WIFI, фонового звука и значений фонового звука в файле приложения 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() говорит: «Socket не подключается».

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

Неужели кому-то удалось преодолеть эту проблему? Протестировано на iOS 5.0 с iphone 3GS & iphone 4.

+0

Вы попробовали 'setKeepAliveTimeout: обработчик:' как это было предложено @DarkDust? Возможно, есть какая-то подготовка для 'applicationWillResignActive:'? – Thompsonian

ответ

0

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

Смежные вопросы