سؤال

أنا أستخدم nsstream مع خاصية SSL لاتصال المقبس. إنه يعمل بشكل جيد عندما أستخدم عنوان IP المحلي مثل 192.168.1.77. ولكن إذا كنت تستخدم أي خادم مثل www.xyz.com (يحتوي على SecurityLEVELTLSV1)، فهو يعرض رمز خطأ خطأ: -9843، الرسالة: تعذر إكمال العملية. (nsunknownownerrordomain خطأ -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. أحصل على نفس الخطأ في كلتا الحالتين.

nsstreameventopencpleted و nsstreameventerrorrocurpredcurped.

الرجاء مساعدتي في هذا المجال.

شكرا مقدما.

راميش

هل كانت مفيدة؟

المحلول

أنا حل هذه المشكلة. خط الكود التالي فعل كل شيء.

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

شكرا، ramesh.p.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top