iOS 域名解析ip(解析)

//思路:1.gethostbyname(szname);取得主机信息结构体

//     2.memcpy(&ip_addr,phot->h_addr_list[0],4);从主机信息结构体中取出需要的32位ip地址ip_addr(二进制的)

//     3.inet_ntop(AF_INET, &ip_addr, ip, sizeof(ip));//将二进制整数转换为点分十进制

#pragma mark 域名解析ip

-(NSString*)getIPAddressByHostName:(NSString*)strHostName

{

//hostent是一个结构体,记录主机的相关信息,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。

//struct hostent *gethostbyname(const char *name),gethostbyname函数根据域名解析出服务器的ip地址,它返回一个结构体struct hostent

const char* szname = [strHostName UTF8String];

struct hostent* phot ;

@try

{

phot = gethostbyname(szname);

}

@catch (NSException * e)

{

return nil;

}

//    struct in_addr {

//        in_addr_t s_addr;

//    };

//    结构体in_addr 用来表示一个32位的IPv4地址.

//    in_addr_t 一般为 32位的unsigned int,其字节顺序为网络顺序(network byte ordered),即该无符号整数采用大端字节序[1]  。.

//    其中每8位代表一个IP地址位中的一个数值.

//    例如192.168.3.144记为0xc0a80390,其中 c0 为192 ,a8 为 168, 03 为 3 , 90 为 144

//    打印的时候可以调用inet_ntoa()函数将其转换为char *类型.

struct in_addr ip_addr;

if(phot)

{

memcpy(&ip_addr,phot->h_addr_list[0],4);

//void *memcpy(void *dest, const void *src, size_t n);

//从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

//h_addr_list[0]里4个字节,每个字节8位,此处为一个数组,一个域名对应多个ip地址或者本地时一个机器有多个网卡

}

else

{

return nil;

}

char ip[20] = {0};

inet_ntop(AF_INET, &ip_addr, ip, sizeof(ip));//将二进制整数转换为点分十进制

NSString* strIPAddress = [NSString stringWithUTF8String:ip];

return strIPAddress;

}

知识点补充:

/*   try

{  //这里是TRY开始,程序开始捕获异常

//如果有异常  进入 catch {} 然后再进入 finally{}

//如果没异常 直接进入 finally{}

//Try结束

}

catch (SqlException ex)

{

//catch  有异常才会进入我这里

return false;

}

finally

{

//无论如何都会进入我这里,这里适合做一些释放资源的事情

//这里可以舍去不用

}*/

//    const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

//    这个函数转换网络二进制结构到ASCII类型的地址,参数的作用和inet_pton相同,只是多了一个参数socklen_t cnt,他是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC。

点分十进制(Dotted Decimal Notation)全称为点分(点式)十进制表示法,是IPv4的IP地址标识方法。IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。点分十进制就是用4个从0~255的数字,来表示一个IP地址。如192.168.1.1。

时间: 2024-11-06 15:08:51

iOS 域名解析ip(解析)的相关文章

iOS 域名解析

如何在iOS下进行域名的解析? /** *  域名解析ip * *  @param hostName 域名 * *  @return ip */ +(NSString *) getIPWithHostName:(const NSString *)hostName { const char *hostN= [hostName UTF8String]; struct hostent* phot; @try { phot = gethostbyname(hostN); } @catch (NSExce

万网云解析全面升级开放,支持海外IP解析!

基于万网过去18年来的专业域名解析服务经验,万网云解析新版实现了承载超过300万域名的全面升级,它是万网DNS域名解析系统的全新升级,目前已正式发布上线,详见万网首页:http://www.net.cn,升级后的云解析,已经全面对外开放,支持非万网域名解析,为非万网域名以及海外IP解析提供免费.智能的域名解析服务. 专注于稳定.安全.快速的解析服务能力,新版云解析主要集中于解析核心功能和关键性能方面的提升与改进. 1.99.99%解析在线保证,无后顾之忧! 依托于阿里云强大的网络基础设施布局,万

iOS 基础函数解析 - Foundation Functions Reference

Foundation Functions Reference Framework Foundation/Foundation.h Declared in NSBundle.h NSByteOrder.h NSDecimal.h NSException.h NSObjCRuntime.h NSObject.h NSPathUtilities.h NSRange.h NSZone.h Overview This chapter describes the functions and function

iOS 中json解析数据出现中文乱码的问题

一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢? 一般都是通过转码来解决,但是直接转码,是不能达到效果的,例如 [jsonStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 这样直接转码是达不到效果的. 解析数据的时候,可以先把数据存放在NSdata对象中,

iOS开发- 生成/解析.vcf文件

vcf, 通讯录导出的一种格式. 一.生成vcf文件 如果要把我们iPhone通讯录里的数据, 生成vcf格式文件. 我们可以借助iCloud. 小技巧:通过iCloud导出iPhone通讯录的方法 当然, 如果你想在应用中, 利用代码生成, 完全可以.先导出通讯录数据, 再解析, 再生成vcf文件即可. 参考下面代码: -(NSString*)generateVCardStringWithContacts:(CFArrayRef)contacts { NSInteger counter = 0

ios json数据解析

刚刚下午那会 弄了个 解析 xml  demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单,这个时候就犹豫了,要不写到博客上来 ? 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟刚开始学习IOS开发方面的知识,就当是巩固了撒! 还是 先看个效果图吧,如下! 接下来 看下工程目录吧,其实并没有必要,直接建立一个工程就行 ,算了,还是贴上来吧,如下: 工程目录中有个 Notes.json 文件,该文件就是 要解析的json数据了 ,也截下

iOS使用TFHpple解析html

iOS 开发中解析html 网上有很多写好的解析框架 今天就来讲一下如何用框架TFHpple来解析html 使用TFHpple解析html github地址:https://github.com/topfunky/hpple 引入有两种方法 第一种:直接从github上下载的源码包拖入工程当中 第二种:用pod TFHpple 引入 但前期准备工作都要做 引入静态库文件 添加库文件的 header search paths(注意,必须选中 All) 准备好了 下面来使用了 使用详情 我们来解析网

iOS push全方位解析(二)【译文】"——生成OpenSSL证书,Provisioning Profile

这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下: 1.[iOS push全方位解析](一) push的概述 2.[iOS push全方位解析](二) 生成push证书,生成Provisioning Profile(本篇) 3.[iOS push全方位解析](三) 一个极简的demo,并测试一下push 这里查看原文 ------------------------------------------

IOS之XML解析

IOS之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> <root> <systemConfig> <CityName>北京</CityName> <CityCode>201</CityCode> <ParentCityCode> 0</ParentCityCode> <areaCode>