iOS StreamStatus всегда возвращает NSStreamStatusOpen - PullRequest
4 голосов
/ 05 марта 2012

Только что был вопрос относительно streamStatus NSStream. В моем приложении у меня есть входной поток и выходной поток, которые хорошо работают при отправке и получении данных. Однако ранее я заметил, что в случае отказа сервера я не получал никаких уведомлений на стороне клиента о том, что соединение разорвано. После нескольких недель попыток исследовать это и внедрить различные тесты я обнаружил, что ни один из них не дал мне правильного ответа на неправильное отключение или сбой сервера. Затем я создал таймер, который срабатывал каждые 5 секунд и вызывал функцию, которая проверяла streamStatus. После отключения сервера путем отключения подключения к локальной сети я заметил, что клиент все еще регистрируется как подключенный. Когда я начал отлаживать клиент, я заметил, что streamStatus всегда возвращал NSStreamStatusOpen как для моих входных, так и для выходных потоков.

Есть ли что-то, чего мне не хватает на моем конце, которого я не делаю? Ниже я приложил небольшой фрагмент того, как я звоню и получаю streamStatus.

Инициализация таймера (Вызывается после успешного подключения):

connectionTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(CheckStream) userInfo:nil repeats:YES];

Проверка потоков:

- (void)CheckStream
{
    NSStreamStatus status = [input streamStatus];

    if(status == NSStreamStatusClosed || status == NSStreamStatusError)
    {
        NSLog(@"Error: %d", status);
    }

    status = [output streamStatus];

    if(status == NSStreamStatusClosed || status == NSStreamStatusError)
    {
        NSLog(@"Error: %d", status);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...