2009-11-09 35 views
5

Tôi đang sử dụng NSStream với thuộc tính SSL để kết nối socket. Nó hoạt động tốt khi tôi sử dụng địa chỉ IP cục bộ như 192.168.1.77. Nhưng nếu tôi sử dụng bất kỳ máy chủ nào như www.xyz.com (nó có SecurityLevelTLSv1), nó sẽ hiển thị lỗi báo lỗi : -9843, Thông báo: Thao tác không thể hoàn thành. (. NSUnknownErrorDomain lỗi -9843)Sự cố với kết nối SSL NSStream

Đây là mã của tôi:

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

tôi đã cố gắng sử dụng cả hai NSStream và CFStream. Tôi nhận được cùng một lỗi trong cả hai trường hợp.

NSStreamEventOpenCompleted and NSStreamEventErrorOccurred events được gọi.

Hãy giúp tôi trong việc này.

Xin cảm ơn trước.

Ramesh.P

Trả lời

6

Tôi đã giải quyết vấn đề này. Dòng mã sau đây đã làm mọi thứ.

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

Cảm ơn, Ramesh.P

Các vấn đề liên quan