开发工具:Qt Creator
c++版本:c++ 11
系统平台:windows 7
在项配置文件*.pro中加入winsock的支持库,直接加入下面的配置
LIBS += -lpthread libwsock32 libws2_32
引入头文件,引入std命令空间
#include <iostream> #include <string> #include <winsock2.h> using namespace std;
通过域名获取ip的函数实现
/************************ * 通过域名获取IP地址 * hostname : 域名地址 例:www.sindsun.com ************************/ char *getIpByHostName(char *hostname){ WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); struct hostent* hostAddr = gethostbyname(hostname); if(hostAddr == nullptr){ cout << "无法找到主机" << endl; return nullptr; } //遍历别名 for(int i=0; hostAddr->h_aliases[i]; i++){ printf("Alias %d : %s\n", i+1, hostAddr->h_aliases[i]); } //地址类型 printf("Address type : %s\n", (hostAddr->h_addrtype==AF_INET) ? "AF_INET" : "AF_INET6"); //IP地址 char *ipv4 = new char; memset(ipv4, 0, 32); for(int i=0; hostAddr->h_addr_list[i]; i++){ //这里使用标准转换运算符reinterpret_cast,强制转换会出现警告 struct in_addr tmpAddr = *reinterpret_cast<struct in_addr*>(hostAddr->h_addr_list[i]); char *ch = inet_ntoa( tmpAddr); strcat(ipv4, ch); } WSACleanup(); return ipv4; }
在封装的这个函数中,我打断点看了一下gethostbyname函数返回的参数,如下图
测试结果
int main() { char *ip = new char; ip = getIpByHostName("www.sindsun.com"); cout << ip << endl; return 0; }
控制台打印出的结果如图
利用getaddrinfo函数获取的文档可以到微软开发人员中心进行查看。
版权声明:
此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处:
[狂码一生]
https://www.sindsun.com/articles/16/131
[若此文确切存在侵权,请联系本站管理员进行删除!]
--THE END--