gethostbyname()函数:通过域名获取IP地址
发布时间:2020-12-15 17:31:13 所属栏目:百科 来源:网络整理
导读:客户端中直接使用 IP 地址会有很大的弊端,一旦 IP 地址变化(IP 地址会经常变动),客户端软件就会出现错误。 而使用域名会方便很多,注册后的域名只要每年续费就永远属于自己的,更换 IP 地址时修改域名解析即可,不会影响软件的正常使用。 关于域名注册、
客户端中直接使用 IP 地址会有很大的弊端,一旦 IP 地址变化(IP 地址会经常变动),客户端软件就会出现错误。 而使用域名会方便很多,注册后的域名只要每年续费就永远属于自己的,更换 IP 地址时修改域名解析即可,不会影响软件的正常使用。 关于域名注册、域名解析、host 文件、DNS 服务器等本节并未详细讲解,请读者自行脑补。本节重点讲解如何使用域名。 通过域名获取IP地址域名仅仅是 IP 地址的一个助记符,目的是方便记忆,通过域名并不能找到目标计算机,通信之前必须要将域名转换成 IP 地址。gethostbyname() 函数可以完成这种转换,它的原型为: struct hostent *gethostbyname(const char *hostname);hostname 为主机名,也就是域名。使用该函数时,只要传递域名字符串,就会返回域名对应的 IP 地址。返回的地址信息会装入 hostent 结构体,该结构体的定义如下: struct hostent{ char *h_name; //official name char **h_aliases; //alias list int h_addrtype; //host address type int h_length; //address lenght char **h_addr_list; //address list }从该结构体可以看出,不只返回 IP 地址,还会附带其他信息,各位读者只需关注最后一个成员 h_addr_list。下面是对各成员的说明:
hostent 结构体变量的组成如下图所示: ![]() 下面的代码主要演示 gethostbyname() 的应用,并说明 hostent 结构体的特性: #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") int main(){ WSADATA wsaData; WSAStartup( MAKEWORD(2,2),&wsaData); struct hostent *host = gethostbyname("www.baidu.com"); if(!host){ puts("Get IP address error!"); system("pause"); exit(0); } //别名 for(int i=0; host->h_aliases[i]; i++){ printf("Aliases %d: %sn",i+1,host->h_aliases[i]); } //地址类型 printf("Address type: %sn",(host->h_addrtype==AF_INET) ? "AF_INET": "AF_INET6"); //IP地址 for(int i=0; host->h_addr_list[i]; i++){ printf("IP addr %d: %sn",inet_ntoa( *(struct in_addr*)host->h_addr_list[i] ) ); } system("pause"); return 0; }运行结果: Aliases 1: www.baidu.com Address type: AF_INET IP addr 1: 61.135.169.121 IP addr 2: 61.135.169.125 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- C#用于Mysql操作的MySqlHelper类
- swift – 我可以将枚举定义为另一个枚举的子集吗?
- c# – 我应该在LINQ中使用OrderByDescending两次吗?
- xml – xpath,count elements error:“Result是一个包含1个
- cocos2dx 加载ExportJson
- 使用Ajax从DataTable中删除单行
- c# – 从IEnumerable到MyCollection的隐式转换
- Vue.js:使用Vue-Router 2实现路由功能介绍
- as/flex 中添加事件addEventListener()时传递参数
- c# – Winform webbrowser reCAPTCHA没有显示