//解析动态域名
while(1)
{
while(!gethostbyname("www.163.com"))
{
AfxMessageBox("没得到"); //一直在这里循环
Sleep(10);
}
hp  =  gethostbyname(m_edit2);
pszAddr = inet_ntoa( *(struct in_addr *)hp->h_addr_list[0] );
break;//这时候只有在MS_DOS窗口输入"ping www.163.com"才能跳出循环
}
AfxMessageBox(pszAddr); //得到域名请问专家这是怎么回事?
谢谢了.

解决方案 »

  1.   

    gethostbyname("www.163.com")) struct hostent FAR * gethostbyname (
      const char FAR * name  
    );返回的是一个结构体参考一下这个哈
    CString CURLIPDlg::YUMING2IP(CString m_url)
    {
    CString YUMING=m_url;
    struct hostent *hptr;
    /* 调用gethostbyname()。调用结果都存在hptr中 */
    if( (hptr=gethostbyname(YUMING) ) == NULL )
    {

    //AfxMessageBox("gethostbyname error for host:" + YUMING);
    //return 0; /* 如果调用gethostbyname发生错误,返回1 */
    //MessageBox("如果调用gethostbyname发生错误,返回1 *");
    return "get IP error";
    }
    else
    {
    //解析返回的hostent信息
    hostent &he = *hptr;
    sockaddr_in sa;
    //for(int nAdapter = 0; he.h_addr_list[nAdapter]; nAdapter++)

    memcpy(&sa.sin_addr.s_addr, he.h_addr_list[0], he.h_length); 

    //he.h_addr_list[nAdapter]应该有若干个,我只要一个IP就成了,就取了[0]的IP,
    //输出机器的IP地址
    //MessageBox("Address: %s\n", inet_ntoa(sa.sin_addr));//将网络地址转换成“.”点隔的字符串格式
    return inet_ntoa(sa.sin_addr); //这里是关键,也是本人研究很长时间才找到的,感谢CSDN上的朋友们.
    }}
      

  2.   

    while(!gethostbyname("www.163.com")) 返回值的判断失误。。