2009-11-09 31 views
5

Estoy usando NSStream con propiedad SSL para la conexión de socket. Funciona bien cuando uso la dirección IP local como 192.168.1.77. Pero si uso cualquier servidor como www.xyz.com (tiene SecurityLevelTLSv1), muestra un error código de error: -9843, Mensaje: La operación no se pudo completar. (. NSUnknownErrorDomain error -9843)Problema con la conexión SSL de NSStream

Aquí está mi código:

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

He intentado utilizar tanto NSStream y CFStream. Estoy obteniendo el mismo error en ambos casos.

Se llaman eventos NSStreamEventOpenCompleted y NSStreamEventErrorOccurred.

Por favor, ayúdenme en esto.

Gracias de antemano.

Ramesh.P

Respuesta

6

He resuelto este problema. La siguiente línea de código hizo de todo.

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

Gracias, Ramesh.P