ich diesen Code zu Setup geschrieben haben einen Stream mit einem Server: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];
}
}
Ich bin in der Lage mit dem Server zu verbinden und senden & Daten empfangen. Aber ich möchte überprüfen, ob die Verbindung noch besteht. Wenn ich ein Kabel vom WLAN-Router abziehe, kann ich immer noch Daten im Stream senden und es ist kein Fehler aufgetreten.
Sie können dies auf Anwendungsebene lösen, indem Sie einen Timer verwenden, um eine Nachricht zu senden und zu überprüfen, ob Sie etwas zurück erhalten. Aber Sie können dies auch mit TCP Keep-Alive-Technik auf einer niedrigeren Ebene lösen.
Wie implementiere ich dies mit NStream? Wie kann ich das Prüfintervall einstellen?
Ich nehme an, dass Sie eine NStreamEventErrorOcurred erhalten, wenn der Stream nicht aktiv ist, indem Sie es mit TCP Keep-Alive überprüfen?
Ich habe diesen Beitrag überprüft, aber ich kann es nicht herausgefunden: Keeping a socket connection alive in iOS
Vielen Dank für Ihre Hilfe!
Ja, ich benutze diese Methode natürlich! Aber wenn ich das UTP-Kabel vom WLAN-Router abziehe, gibt der Stream mir keinen Fehler! Deshalb möchte ich TCP Keep-Alive verwenden. –
sollte es Stream-Status 8 oder 16 drucken. – meth
es gibt mir die Fehlerbeschreibung, wenn ich Fehler Ereignis wie schreiben (NStreamStatus) NStreamEventErrorOccurred: – meth