質問

私は、ソケット接続のためのSSLプロパティを使用してNSStreamを使用しています。私は、このような192.168.1.77などのローカルIPアドレスを使用する場合には正常に動作します。しかし、私は(それがSecurityLevelTLSv1を持っている)www.xyz.comのような任意のサーバを使用している場合、それはエラーを示してい エラーコード:-9843、メッセージ:操作を完了できませんでした。 (NSUnknownErrorDomainエラー-9843。)

ここに私のコードは次のとおりです。

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

私はNSStreamとCFStreamの両方を使用してみました。私はどちらの場合も同じエラーを取得しています。

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

この中で私を助けてくださいます。

事前に感謝します。

Ramesh.P

役に立ちましたか?

解決

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

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

おかげで、 Ramesh.P

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top