1、首先新建项目->Win32控制台应用程序
2、解决方案>添加>新建项目,两个项目都添加ws2_32.lib链接库
(1,2步骤可参考:WinSocket编程(C++)实例一)
3、直接上代码:
gethostbyaddr_win.cpp
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
void ErrorHandling(char *message);
int main(int argc, char *argv[])
{
WSADATA wsaData;
int i;
struct hostent *host;
SOCKADDR_IN addr;
if(argc!=2) {
printf("Usage : %s <IP>\n", argv[0]);
exit(1);
}
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
ErrorHandling("WSAStartup() error!");
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr=inet_addr(argv[1]);
host=gethostbyaddr((char*)&addr.sin_addr, 4, AF_INET);
if(!host)
ErrorHandling("gethost... error");
printf("Official name: %s \n", host->h_name);
for(i=0; host->h_aliases[i]; i++)
printf("Aliases %d: %s \n", i+1, host->h_aliases[i]);
printf("Address type: %s \n",
(host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6");
for(i=0; host->h_addr_list[i]; i++)
printf("IP addr %d: %s \n", i+1,
inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
gethostbyname_win.cpp
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
void ErrorHandling(char *message);
int main(int argc, char *argv[])
{
WSADATA wsaData;
int i;
struct hostent *host;
if(argc!=2) {
printf("Usage : %s <addr>\n", argv[0]);
exit(1);
}
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
ErrorHandling("WSAStartup() error!");
host=gethostbyname(argv[1]);
if(!host)
ErrorHandling("gethost... error");
printf("Official name: %s \n", host->h_name);
for(i=0; host->h_aliases[i]; i++)
printf("Aliases %d: %s \n", i+1, host->h_aliases[i]);
printf("Address type: %s \n",
(host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6");
for(i=0; host->h_addr_list[i]; i++)
printf("IP addr %d: %s \n", i+1,
inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
4、用记事本打开hosts文件,做以下修改并保存:
(位置在C:\Windows\System32\drivers\etc)

地址和域名可自行修改。
注意:hosts修改权限:
右击文件->属性

5、打开命令提示符窗口,运行两个应用程序

可通过地址查询到域名,或者通过域名查询到地址
6、记得点赞加关注
本文介绍如何使用WinSocket API在C++中实现域名与IP地址的相互查询,包括gethostbyaddr和gethostbyname函数的应用。通过示例代码展示了如何创建Win32控制台应用程序,设置ws2_32.lib链接库,并解析主机名和IP地址。
463

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



