up

解决方案 »

  1.   

    照理说gethostbyaddr出现这种情况也就罢了,但WSAAsyncGetHostByAddr是异步操作,不应该存在此问题啊
      

  2.   

    ADSL上网,扫描一个网段差不多要15分钟(256台)
      

  3.   

    线程代码如下:
    void Threadgetname(void *ipcode)
    {
    int dip=(int)ipcode;     struct sockaddr_in  sin; sin.sin_addr.s_addr =htonl(startip+dip);//目标机ip

    WSAAsyncGetHostByAddr(HwndMain,GETHOSTNAME,(LPCSTR)&sin.sin_addr.S_un.S_addr,4,PF_INET,computername[dip],100); _endthread(); return;
    }
      

  4.   

    WSAAsyncGetHostByAddr是异步的,你虽然放在多线程里执行,但使用的主窗口句柄都是一个,所以消息将放到该窗口消息队列中排队,这和循环调用结果是一样的。所以你的程序没有体现出多线程的优势。但你用多线程调用gethostbyaddr的效果就和循环调用gethostbyaddr的速度就是不一样的,因为gethostbyaddr是同步的。
      

  5.   

    请指点用WSAAsyncGetHostByAddr实现快速获取主机名的办法
      

  6.   

    另外,用多线程的GetHostByAddr返回的hostent *的IP地址并不与搜索到的主机名对应,真的好怪