首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncSocket WHOIS连接

AsyncSocket WHOIS连接
EN

Stack Overflow用户
提问于 2011-12-01 11:46:11
回答 1查看 527关注 0票数 0

我正在尝试使用GCDAsyncSocket连接到WHOIS服务器(com.whis-servers.net:43)。我可以连接并写入服务器,然后调用didWriteDataWithTag:,但是没有数据。WHOIS服务器确实发送了一个响应,但我无法读取它。

代码语言:javascript
复制
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:

代码语言:javascript
复制
- (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]);
}

帮忙?!

EN

回答 1

Stack Overflow用户

发布于 2012-03-02 23:09:56

我在使用AsyncSocket时遇到了同样的问题。我从来没有完全解决它,但找到了一个接近的解决方案。

onSocket:willDisconnectWithError (GapSocketCommand.m)中,可以通过调用unreadData来获取连接失败时的当前缓冲区。

代码语言:javascript
复制
- (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,但解决方案应该是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8336300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档