我有一个问题:如何将IP地址(如www.google.com)转换(解析)为IP地址(字节数组)?我尝试了不同的代码,但是如果地址不存在,每次代码崩溃。有办法检查吗?

+ (void) resolveIPAddress: (NSString*) dnsAddress {
    struct hostent hostentry;
    const char str = [ dnsAddress UTF8String ];
    hostentry = gethostbyname(str);
    char ipbuf[4];
    char *ipbuf_ptr = &ipbuf[0];
    ipbuf_ptr = inet_ntoa(*((struct in_addr *)hostentry->h_addr_list[0]));
    printf("%s",ipbuf_ptr);
}

最佳答案

问题是您的方法尝试使用gethostbyname的结果而不检查h_errno。当h_errno不为零时,hostentry中的结果无效。在inet_ntoa中取消引用它们会导致崩溃。

+ (void) resolveIPAddress: (NSString*) dnsAddress {
    struct hostent hostentry;
    const char str = [ dnsAddress UTF8String ];
    hostentry = gethostbyname(str);
    if (h_errno) {
        NSLog(@"Error resolving host: %d", h_errno);
        return;
    }
    char ipbuf[4];
    char *ipbuf_ptr = &ipbuf[0];
    ipbuf_ptr = inet_ntoa(*((struct in_addr *)hostentry->h_addr_list[0]));
    printf("%s",ipbuf_ptr);
}

关于iphone - 如何解析一个互联网地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28781636/

10-10 15:03