AsyncSocket WHOIS 连接
Posted
技术标签:
【中文标题】AsyncSocket WHOIS 连接【英文标题】:AsyncSocket WHOIS connect 【发布时间】:2011-12-01 03:46:11 【问题描述】:我正在尝试使用 GCDAsyncSocket
连接到 WHOIS 服务器 (com.whois-servers.net:43)。我可以连接并写入服务器并调用didWriteDataWithTag:
,但没有数据。 WHOIS 服务器确实发送了响应,但我无法阅读。
NSLog(@"Connecting to \"%@\" on port %hu...", host, port);
self.viewController.label.text = @"Connecting...";
NSError *error = nil;
if (![asyncSocket connectToHost:@"com.whois-servers.net" onPort:43 error:&error])
DDLogError(@"Error connecting: %@", error);
self.viewController.label.text = @"Oops";
NSString *requestStr = [NSString stringWithFormat:@"domain google.com\r\n\r\n"];
NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];
[asyncSocket writeData:requestData withTimeout:-1 tag:0];
[asyncSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:0];
这里是didReadData:
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
DDLogInfo(@"socket:%p didReadData:withTag:%d", sock, tag);
NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Data: %i", [data length]);
帮忙?!
【问题讨论】:
【参考方案1】:我在使用 AsyncSocket 时遇到了同样的问题。我从来没有完全解决它,但找到了一个接近的解决方案。
在onSocket:willDisconnectWithError(GapSocketCommand.m)中可以通过调用unreadData获取连接失败时的当前缓冲区。
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
NSLog(@"onSocket:willDisconnectWithError %@",err);
NSData * unreadData = [sock unreadData]; // ** This gets the current buffer
if(unreadData)
[self onSocket:sock didReadData:unreadData withTag:NULL]; // ** Return as much data that could be collected
else
NSString* jsString = [[NSString alloc] initWithFormat:@"GapSocket.__onError(\"%d\",\"%@\");"
,[sock userData]
,[err localizedDescription] ];
[self.webView stringByEvaluatingjavascriptFromString:jsString];
//[jsString release];
您必须修改它以应用于 GCDAsyncSocket,但解决方案应该是相同的。
【讨论】:
谢谢。我真的把它修好了。原来我已经包含了 GCDAsyncSocket.h 两次并导致它不调用函数。但是,如果我再次尝试调用它(在 .com、.net 中,whois 进程是一个需要两个连续套接字调用的两步过程),就会出现此问题。以上是关于AsyncSocket WHOIS 连接的主要内容,如果未能解决你的问题,请参考以下文章
如何修复此错误(“_OBJC_CLASS_$_AsyncSocket”,引用自:)
ios 9 中的 Asyncsocket 错误 - 在连接或接受连接时尝试连接。先断开