Как мне восстановить соединение TCP Socket после того, как iPhone перейдет в спящий режим

..и мое приложение все еще работает!

Есть этот вопрос о том, что происходит, когда он засыпает + просыпается. Я знаю, что звонит:

- (void)AppDidBecomeActive:(NSNotification *)notification {

    if(jsocket){
        [jsocket release];
    }
    jsocket = [[johnsocket alloc] init];

    if(![jsocket connectViaSocket:(NSString*)ipaddress port:@"3660"]){
        //port 3660 is the XML port!!! good thing to know... 3663 is the binary protocol port.  yay!
        NSLog(@"error connecting from rooms page");
    }
}

(примечание: я использую Asyncsocket.m, отличный класс, помогающий управлять сокеты и тому подобное ... это то, что является экземпляром jsocket. Это клиентское приложение tcp.)

На самом деле у меня было всплывающее окно с предупреждением в этой функции, чтобы убедиться, что она вызывается ... вы видите, iphone / itouch не переходят в спящий режим, когда он подключен к USB, что делает эту ситуацию более сложной для отладки.

Итак, мой вопрос, как я могу сделать так, чтобы он не падал?


person cmos    schedule 01.04.2009    source источник


Ответы (1)


Если у вас нет полного контроля над сервером, вы ничего не можете сделать, чтобы просто «разбудить» сокет после произвольного времени сна. удаленный сервер, вероятно, закроет соединение по истечении тайм-аута - это то, что вы должны предполагать в любом случае.

Вам придется повторно инициировать соединение и синхронизировать свое состояние с сервером с нуля.

person Rog    schedule 01.04.2009