2009-11-09 3 views
5

J'utilise NSStream avec la propriété SSL pour la connexion par socket. Cela fonctionne très bien lorsque j'utilise l'adresse IP locale telle que 192.168.1.77. Mais si j'utilise un serveur comme www.xyz.com (il a SecurityLevelTLSv1), il montre une erreur code d'erreur: -9843, Message: Opération n'a pas pu être terminée. (. Erreur NSUnknownErrorDomain -9843)Problème avec la connexion SSL NSStream

Voici mon code:

-(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]; 
} 

J'ai essayé d'utiliser les deux NSStream et CFStream. Je reçois la même erreur dans les deux cas.

Les événements NSStreamEventOpenCompleted et NSStreamEventErrorOccurred sont appelés.

S'il vous plaît aidez-moi dans ceci.

Merci d'avance.

Ramesh.P

Répondre

6

Je résolu cette question. La ligne de code suivante a tout fait.

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

Merci, Ramesh.P