NSHost nehmen eine schrecklich lange Zeit
-
03-07-2019 - |
Frage
Ich habe einen iPhone App, die ein Client für eine vorhandene Server-Anwendung ist.
Ich bin mit dem folgenden Code zu verbinden, und dieser Code funktioniert gut. Heute begann ich mit der Arbeit an dem Projekt, und etwas Merkwürdiges passiert.
Wenn ich auf „Connect“ NSHost dauert ca. 30-45 Sekunden mit dem Host zu lösen und zu verbinden. Sobald die Verbindung hergestellt ist, Datenübertragungsgeschwindigkeiten sind normal und schnell.
Ich habe die ursprüngliche Client-Software (PC-Anwendung) auf den gleichen Server verbindet, und die Verbindung wird sofort erledigt !!
Vielleicht kann jemand etwas Licht auf das Thema werfen ...
-(IBAction)tryConnection{
[self showLogoffButtons];
iPhone_PNPAppDelegate *mainDelegate = (iPhone_PNPAppDelegate *)[[UIApplication sharedApplication] delegate];
settings=mainDelegate.settings;
[activityindicator startAnimating];
sendState=0;
NSHost* host;
//30-45 second pause happens here (since I am using an IP Address)
host = [NSHost hostWithAddress:settings.masterLocation];
//NSHost returns (eventually) with the correct connection.
if (!host) {
host = [NSHost hostWithName:settings.masterLocation];
}
if( host ) {
[NSStream getStreamsToHost:host port:[settings.masterPort intValue] inputStream:&iStream outputStream:&oStream] ;
if( nil != iStream && nil != oStream ) {
[iStream retain];
[oStream retain];
[iStream setDelegate:self];
[oStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
[oStream open];
}else{
[self resetConnectionAndScreen];
self.navigationItem.prompt=@"Connection Error! Please check connection settings.";
}
}else{
[self resetConnectionAndScreen];
self.navigationItem.prompt=@"Connection Error! Please check connection settings.";
}
}
// Ich bin jetzt auch diese Warnungen erhalten. ** .. wth ?! :)
- Warnung: nein '+ hostWithAddress:' Methode gefunden
- Warnung: (Meldungen ohne eine passende Methode Signatur
- Warnung: nein '+ hostWithName:' Methode gefunden
- Warnung: 'NSStream' reagiert möglicherweise nicht auf '+ getStreamsToHost: port: input: output:'
Lösung
Ich habe meinen Code die folgenden aktualisiert, was mein Problem gelöst ist.
-(IBAction)tryConnection{
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)settings.masterLocation, [settings.masterPort intValue], &readStream, &writeStream);
if (readStream && writeStream) {
CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
iStream = (NSInputStream *)readStream;
[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = (NSOutputStream *)writeStream;
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream open];
}
if (readStream) CFRelease(readStream);
if (writeStream) CFRelease(writeStream);
}
Andere Tipps
Hier ist eine weitere Möglichkeit der Vernetzung cfsockets mit