NSStream TCP Keep-Alive für iOS
Ich habe diesen Code geschrieben, um einen Stream mit einem Server einzurichten:
-(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];
}
}
Ich kann eine Verbindung zum Server herstellen und Daten senden und empfangen. Ich möchte aber prüfen, ob die Verbindung noch besteht. Wenn ich ein Kabel vom WLAN-Router abziehe, kann ich trotzdem Daten im Stream senden und es ist kein Fehler aufgetreten.
Sie können dies auf Anwendungsebene lösen, indem Sie mit einem Timer eine Nachricht senden und prüfen, ob Sie etwas zurückerhalten. Sie können dies jedoch auch mit der TCP-Keep-Alive-Technik auf einer niedrigeren Ebene lösen.
Wie implementiere ich das mit NSStream? Wie kann ich das Überprüfungsintervall einstellen?
Ich gehe davon aus, dass Sie einen NSStreamEventErrorOcurred erhalten, wenn der Stream inaktiv ist, indem Sie ihn mit TCP Keep-Alive überprüfen.
Ich habe diesen Beitrag überprüft, aber ich kann es nicht herausfinden:Eine Socket-Verbindung in iOS am Leben erhalten
Danke für Ihre Hilfe!