Как восстановить соединение через сокет TCP после того, как iPhone переходит в режим сна - PullRequest
0 голосов
/ 01 апреля 2009

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

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

- (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, что затрудняет отладку этой ситуации.

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

1 Ответ

3 голосов
/ 01 апреля 2009

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

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

...