C++完成域名解析
network类:
自定义network.h头文件
#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#ifndef _NetWorkAPI_
#define _NetWorkAPI_
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
class network
{
public:
network();
~network();
protected:
int err;
char *IpAddr[8]; //存域名的ip地址(可能存在多个ip地址)
bool gethostip();
int True;//标记有效地IP地址
};
#endif
类代码实现:
#include"network.h"
#include <iostream>
network::~network()
{
for (int i = 0; i < 8; i++)
{
if (*(IpAddr + i))
delete[] *(IpAddr + i);
else
break;
}
}
network::network()
{
memset(IpAddr, NULL, 8);
err = gethostip();
}
bool network::gethostip()
{
//加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1, 1); //初始化Socket动态连接库,请求1.1版本的winsocket库
err = WSAStartup(wVersionRequested, &wsaData);
if (LOBYTE(wsaData.wVersion) != 1 || //判断请求的winsocket是不是1.1的版本
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup(); //清盘
return false; //终止对winsocket使用
}
//WSADATA ws;
//WSAStartup(MAKEWORD(2,2),&ws);//
char http[] = "www.myvip6.com"; //访问服务器域名
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);//建立socket
if (sock == INVALID_SOCKET)
{
std::cout << "建立访问socket套接字失败!" << std::endl;
return false;
}
hostent* host = gethostbyname(http);//取得主机的IP地址
if (host == NULL)
{
//std::cout << "主机处于没有联网状态;" << std::endl;
return false;
}
in_addr addr;
for (int i = 0;; i++)
{
char *p = host->h_addr_list[i];
if (p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, host->h_length);
*(IpAddr + i) = new char[strlen(inet_ntoa(addr)) + 1];
strcpy(*(IpAddr + i), inet_ntoa(addr));
//std::cout << *(IpAddr + i);
}
return true;
}
通过socket完成域名的解析
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。