NSStream TCP Keep-alive iOS
Я написал этот код для настройки потока с сервером:
-(void)streamOpenWithIp:(NSString *)ip withPortNumber:(int)portNumber;
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)ip, portNumber, &readStream, &writeStream);
if(readStream && writeStream)
{
CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
//Setup inpustream
inputStream = (__bridge NSInputStream *)readStream;
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
//Setup outputstream
outputStream = (__bridge NSOutputStream *)writeStream;
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream open];
}
}
Я могу подключиться к серверу и отправить получить данные. Но я хочу проверить, есть ли еще соединение. Если я отсоединяю кабель от маршрутизатора Wi-Fi, я все еще могу отправлять данные в потоке, и никаких ошибок не произошло.
Вы можете решить эту проблему на уровне приложения, используя таймер для отправки какого-либо сообщения и проверки получения чего-либо обратно. Но вы можете решить эту проблему и с помощью технологии Keep-Alive TCP на более низком уровне.
Как мне реализовать это с NSStream? Как я могу установить интервал проверки?
Я предполагаю, что вы получаете NSStreamEventErrorOcurred, когда поток не работает, проверяя его с помощью TCP Keep-Alive?
Я проверил этот пост, но я могуt понять это:Поддержание соединения сокета в iOS
Спасибо за вашу помощь!