您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页iOS应用中的DNS解析错误的处理

iOS应用中的DNS解析错误的处理

来源:二三四教育网

问题:

  • 无法解析, 无法得到IP
  • 错误解析, 返回错误IP

解决方法:

  1. 在发布app时, 内置一个默认IP, 例如192.168.88.63;
  2. 在启动时, 或者网络连通性变化时, 解析域名;
    + (NSString *)getIPAddress:(NSString*) hostname{
        Boolean result;
        CFHostRef hostRef;
        CFArrayRef addresses;
        NSString *ipAddress = @"";
          hostRef = CFHostCreateWithName(kCFAllocatorDefault, (__bridge CFStringRef)hostname);
          if (hostRef) {
              result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
              if (result == TRUE) {
                  addresses = CFHostGetAddressing(hostRef, &result);
              }
          }
          if (result == TRUE) {
              CFIndex index = 0;
              CFDataRef ref = (CFDataRef) CFArrayGetValueAtIndex(addresses, index);
              struct sockaddr_in* remoteAddr;
              char *ip_address;
              remoteAddr = (struct sockaddr_in*) CFDataGetBytePtr(ref);
              if (remoteAddr != NULL) {
                  ip_address = inet_ntoa(remoteAddr->sin_addr);
              }
              ipAddress = [NSString stringWithCString:ip_address encoding:NSUTF8StringEncoding];
          }
          return ipAddress;
      }
  1. 检查解析的结果
    3.1 如果不能解析, 使用一个默认的IP地址代替域名;
之后的网络请求为: https://192.168.88.63/login

3.2 如果解析成功,例如是192.168.87.62 ,为了防止解析结果错误,可以采用一个检测接口, 调用后,根据其响应(Http Response)内容, 检查域名中的api接口是否正常;


response: {state: "Im ok"}

3.2.1 如果api正常, 则使用域名进行请求. 并且将默认IP改为192.168.87.62, 作为下次备用.

之后的网络请求为: 

3.2.2 如果域名不正常, 则使用默认IP

之后的网络请求为: https://192.168.88.63/login
  1. 将域名或者IP设置为AFHTTPSessionManager的BaseURL进行正常的网络请求

备注

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务