我有一个问题:如何将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/