NSStream TCP Keep-alive iOS
Napisałem ten kod, aby skonfigurować strumień z serwerem:
-(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];
}
}
Jestem w stanie połączyć się z serwerem i wysyłać i odbierać dane. Ale chcę sprawdzić, czy połączenie nadal istnieje. Jeśli odłączę kabel od routera Wi-Fi, nadal mogę wysyłać dane w strumieniu i nie wystąpił błąd.
Możesz rozwiązać ten problem na poziomie aplikacji, używając zegara, aby wysłać wiadomość i sprawdzić, czy coś otrzymasz. Ale możesz to rozwiązać również przy pomocy techniki TCP Keep-Alive na niższym poziomie.
Jak zaimplementować to za pomocą NSStream? Jak mogę ustawić interwał sprawdzania?
Zakładam, że otrzymujesz NSStreamEventErrorOcurred, gdy strumień jest wyłączony, sprawdzając go za pomocą TCP Keep-Alive?
Sprawdziłem ten post, ale nie mogę tego zrozumieć:Utrzymanie połączenia z gniazdem w systemie iOS
Dzięki za pomoc!