#include <iostream>
using namespace std;
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib,"WS2_32.lib")
class CInitSock
{
public:
CInitSock()
{
//必须要注册网络库
WSADATA wsd;
if (::WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};
//获取本地所有的iP地址
void fun1()
{
CInitSock inits;
//1.获取主机名
char bufname[256] = {0};
::gethostname(bufname, 256);
printf("%s\n",bufname);
//2.得到地址信息
hostent* pHost = ::gethostbyname(bufname);
in_addr addr;
for (int i = 0;;i++)
{
char* p = pHost->h_addr_list[i];
if (p == nullptr)
{
break;
}
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char* szIP = inet_ntoa(addr);
printf("本机IP地址:%s\n",szIP);
}
}
//域名解析
void fun2()
{
CInitSock inits;
//1.获取主机名
char hostname[256] = { 0 };
printf("请输入解析的域名:");
cin>>hostname;//www.baidu.com
//2.得到地址信息
hostent* pHost = ::gethostbyname(hostname);
in_addr addr;
for (int i = 0;; i++)
{
char* p = pHost->h_addr_list[i];
if (p == nullptr)
{
break;
}
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char* szIP = inet_ntoa(addr);
printf("域名:%s IP地址:%s\n", hostname, szIP);
printf("服务器名字:%s\n",pHost->h_name);
}
}
int main()
{
cout << "*******************\n";
fun1();
cout << "*******************\n";
cout << "*******************\n";
fun2();
cout << "*******************\n";
system("pause");
return 0;
}
结果:

本文介绍了如何使用C++中的WinsockAPI获取本地所有IP地址以及解析域名,包括使用`WSAStartup`初始化套接字库,`gethostbyname`获取主机信息,和`inet_ntoa`转换地址为IPv4字符串。
1375

被折叠的 条评论
为什么被折叠?



