Visual C++ 2017网络编程实战
上QQ阅读APP看书,第一时间看更新

2.10 获取本地计算机的域名

域名(Domain Name)或称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

可以通过函数GetNetworkParams来获取本地计算机的域名。这个函数其实可以检索本地计算机的网络参数,包括域名、主机名等。当然如果本机没有设置域名,那么得到的域名字段内容就是一个空字符串。该函数声明如下:

    DWORD GetNetworkParams(PFIXED_INFO pFixedInfo,  PULONG  pOutBufLen);

其中,参数pFixedInfo指向一个缓冲区的指针,该缓冲区包含一个固定的信息结构,该结构接收本地计算机的网络参数(如果函数成功),调用GetNetworkParams函数之前,调用方必须分配正确大小的缓冲区才会获得内容信息,如果该参数为NULL,那么pOutBufLen能获得实际所需要的缓冲区大小;参数pOutBufLen指向一个ULONG变量的指针,该变量指定固定信息结构的大小。如果此大小不足以容纳信息,GetNetworkParams将使用所需大小填充此变量,并返回错误代码ERROR_BUFFER_OVERFLOW。如果函数成功,返回值为ERROR_SUCCESS;如果函数失败,返回值是错误代码。

【例2.10】获取本机的域名

(1)新建一个对话框工程Demo。

(2)切换到资源视图,在对话框上放一个按钮,然后添加事件代码:

    void CDemoDlg::OnTest()
    {
    //获得需要的缓冲区大小
    DWORD nLength = 0;
    if (GetNetworkParams(NULL, &nLength) != ERROR_BUFFER_OVERFLOW)
    {
         return;
    }

    FIXED_INFO* pFixedInfo = (FIXED_INFO*)new BYTE[nLength];

    //获得本地计算机网络参数
    if (GetNetworkParams(pFixedInfo, &nLength) != ERROR_SUCCESS)
    {
         delete[] pFixedInfo;
         return;
    }

    //获得本地计算机域名
    CString strText = _T("");
    strText.Format(_T("本地计算机的域名:\n%s"), pFixedInfo->DomainName);
    AfxMessageBox(strText);

    delete[] pFixedInfo;
    }

(3)保存工程并运行,运行结果如图2-14所示。

图2-14