我正在使用带有SSL属性的NSStream进行套接字连接。当我使用本地IP地址(如192.168.1.77 )时,它工作正常。但是如果我使用像www.xyz.com这样的服务器(它有SecurityLevelTLSv1),它会显示一个错误错误代码:-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
发布于 2009-11-11 15:26:12
我解决了这个问题。下面这行代码完成了所有工作。
[settings setObject:@"www.xyz.com" forKey:(NSString *)kCFStreamSSLPeerName];谢谢,Ramesh.P。
https://stackoverflow.com/questions/1700819
复制相似问题