我向 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 的服务器。
我在这里想念什么?