当指定的IP地址存在对应的域名时,这个函数的速度很快;
但是如果指定的IP地址不存在对应的域名,就变得非常之慢,请问有没有解决的办法。谢谢!!!

解决方案 »

  1.   

    用gethostbyaddr()阻塞时间不管成功与否都是4秒左右
      

  2.   

    CString IProveHOST(CString ip)
    {

    CString strRet;
    strRet.Empty();
    ULONG ulIP = inet_addr(ip);
    SOCKADDR_IN  Addr;
    Addr.sin_addr.S_un.S_addr=inet_addr(ip);
    Addr.sin_family = AF_INET;
    Addr.sin_addr.S_un.S_addr = ulIP;
        hostent *pHosten = gethostbyaddr((char*)&Addr.sin_addr, ip.GetLength(), AF_INET);
        ASSERT(pHosten!=NULL);
    strRet = pHosten->h_name;
    return strRet;
    }
      

  3.   

    楼主是想扫描计算机吧。
    我以前用C++Builder使用gethostbyaddr()写过一个扫描程序,的确很慢。
    你可以用多线程+延迟控制(局域网中能链上计算机不会大于150ms,看网络状况了。 )建议楼主用sock_stream套接字,connect(),成功确保计算机存在。再使用gethostbyaddr()速度快很多。
      

  4.   


    HANDLE WSAAsyncGetHostByAddr(
      HWND hWnd,
      unsigned int wMsg,
      const char* addr,
      int len,
      int type,
      char* buf,
      int buflen
    );
    是它异步版的函数,找到时会向hWnd发送消息,这样就不用等了。