在iOS应用程序上支持IPv6(尽管它在测试中有效,但仍然被拒绝)

时间:2016-07-04 23:42:32

标签: ios objective-c iphone ipv6

我正在尝试部署应用程序相当长一段时间,但由于它不能在Apple的IPv6网络上运行,因此它仍然被拒绝,即使我使用NSURLSession发送POST。我做了更多的尝试而且没有选择,有没有人知道这是一个与他们的测试环境相关的问题还是我的代码? 这是代码:

    - (NSData *) postToServer: (NSData *) msg {

        __block NSData *urlData = NULL;
        self.status = @"offline";
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

        NSURL *url = [NSURL URLWithString:@"http://myserver.php"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
        [request setHTTPMethod:@"POST"];
        [request setHTTPBody:msg];

        NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

            if (error) {
                self.status = @"offline";
                dispatch_semaphore_signal(semaphore);
                return;
            }

            if ([response isKindOfClass:[NSHTTPURLResponse class]]) {

                NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];

                if (statusCode >= 200 && statusCode < 300) {

                    self.status = @"online";
                    urlData = data;

                }
                else {

                    self.status = @"offline";

                }
                NSLog(@"Código resposta: %ld / Resposta ==> %@", (long)statusCode, [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]);
            }
            dispatch_semaphore_signal(semaphore);

        }];
        [postDataTask resume];

        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

        return urlData;

    }

如果我在这方面有任何不妥之处,请帮我解决,请大大延迟我的工作时间表,即使阅读所有Apple论坛关于IPv6的主题,也无法弄明白。 (此代码适用于iPhone SE iOS 9.3.2的工作场所,仅在审核时失败。) 谢谢你的帮助。
纳坦

1 个答案:

答案 0 :(得分:0)

如OP所述,他的解决方案:

  

问题出在我的服务器上,该服务器尚未准备好完全为IPv6做好准备。如果它没有IPv6地址,该应用程序可以在仅IPv6网络上合成IPv4地址并正常通信,但我的主机有地址但无法通过它进行响应。如果其他人遇到此问题,请尝试使用此测试:http://ipv6-test.com/validate.php并检查您的主机是否通过了AAAA DNS记录,但是其余的都未通过,那么您应首先查看您的服务器,而不是代码(假设你的代码没问题,NSURLSession和东西。