2009-11-09 16 views
5

Używam NSStream z właściwością SSL dla połączenia z gniazdem. Działa dobrze, gdy używam lokalnego adresu IP, takiego jak 192.168.1.77. Ale jeśli korzystam z dowolnego serwera, takiego jak www.xyz.com (ma SecurityLevelTLSv1), pokazuje on kod błędu : -9843, Wiadomość: Operacja nie mogła zostać zakończona. (. Błąd NSUnknownErrorDomain -9843)Problem z połączeniem NSStream SSL

Oto mój kod:

-(void) startSocket{ 
    NSURL *website = [NSURL URLWithString:@"www.xyz.com"]; 
    NSHost *host = [NSHost hostWithName:[website host]]; 
    if(host) { 
     NSLog(@"Valid host"); 
     [NSStream getStreamsToHost:host port:443 inputStream:&iStream outputStream:&oStream] ; 
     [self openStream]; 
    }. 

-(void)openStream{ 
NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:1]; 
    [settings setObject:(NSString *)NSStreamSocketSecurityLevelTLSv1 forKey:(NSString *)kCFStreamSSLLevel]; 
    [settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot]; 

    [iStream retain]; 
    [iStream setDelegate:self]; 
    [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    CFReadStreamSetProperty((CFReadStreamRef)iStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings); 
    //[iStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey]; 
    [iStream open]; 

    [oStream retain]; 
    [oStream setDelegate:self];  
    [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    CFWriteStreamSetProperty((CFWriteStreamRef)oStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings); 
    //[oStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey]; 
    [oStream open]; 
} 

Próbowałem przy użyciu zarówno NSStream i CFStream. W obu przypadkach otrzymuję ten sam błąd.

Wywoływane są zdarzenia NSStreamEventOpenCompleted i NSStreamEventErrorOcurred.

Proszę, pomóżcie mi w tym.

Z góry dziękuję.

Ramesh.P

Odpowiedz

6

Rozwiązałem ten problem. Poniższy wiersz kodu zrobił wszystko.

[settings setObject:@"www.xyz.com" forKey:(NSString *)kCFStreamSSLPeerName]; 

Dzięki Ramesh.P

Powiązane problemy