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:'
War es hilfreich?

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

http://randomsnippetsofusefulstuff.blogspot.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top