1

我向 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 的服务器。

我在这里想念什么?

4

0 回答 0