我为CocoaAsyncSocket添加了SOCKS功能。我首先尝试在GCDAsyncSocket上执行此操作,但失败了。
对于CocoaAsyncSocket,我只是在此方法中的读/写流上设置SOCKS属性(在GCDAsyncSocket中,只有iOS使用CFSocket读/写套接字) 这被粘贴在方法中 - (BOOL)createStreamsToHost:(NSString )hostname onPort:(UInt16)端口错误:(NSError * )errPtr
NSLog(@"Setting SOCKS proxy: %@:%d", theProxyHost, theProxyPort);
CFDictionaryRef proxyDict = CFNetworkCopySystemProxySettings();
CFMutableDictionaryRef socksConfig = CFDictionaryCreateMutableCopy(NULL, 0, proxyDict);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyHost, (CFStringRef)theProxyHost);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyPort, (__bridge CFNumberRef)[NSNumber numberWithInteger:theProxyPort]);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion4);
CFReadStreamSetProperty((CFReadStreamRef)theReadStream, kCFStreamPropertySOCKSProxy, socksConfig);
CFWriteStreamSetProperty((CFWriteStreamRef)theWriteStream, kCFStreamPropertySOCKSProxy, socksConfig);
CFRelease(proxyDict);
它运行良好,因为它通过代理路由所有流量。 但要么我不明白代理如何工作,要么我做错了,因为:
if(![socket connectToHost:@"somedomain.com" onPort:9567 error:&error]) {
NSLog(@"Could not connect: %@", [error localizedDescription]);
}
无论服务器是否响应,都始终返回true。因为代理响应。 CocoaAsyncSocket的委托方法
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
使用代理服务器的主机和端口调用,而不是我调用connectToHost:onPort:error on的服务器。
我在这里缺少什么?