2009-11-09 33 views
5

ソケット接続にSSLプロパティのNSStreamを使用しています。 192.168.1.77などのローカルIPアドレスを使用するとうまく動作します。しかし、www.xyz.com(SecurityLevelTLSv1を持つ)のようなサーバーを使用すると、エラー エラーコード:-9843、メッセージ:操作を完了できませんでした。私はNSStreamとCFStreamの両方を使用してみましたNSStream SSL接続の問題

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

:(。NSUnknownErrorDomainエラー-9843)

は、ここに私のコードです。私は両方の場合で同じエラーが発生しています。

NSStreamEventOpenCompletedイベントとNSStreamEventErrorOccurredイベントが呼び出されます。

私を助けてください。

ありがとうございます。

Ramesh.P

答えて

6

私はこの問題を解決しました。 次のコード行がすべて行いました。

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

おかげで、 Ramesh.P