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完成域名的解析

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。