Только что был вопрос относительно 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);
}
}