如何编程来获取,一个主机地址(主机名或者IP)是否在局域网里真实存在?

解决方案 »

  1.   

    非要在局域网中吗?
    用程序实现ping,看能不能通
      

  2.   

    如果在同一局域网内,最准确的方法是通过ARP来得到该IP的网卡物理地址。
    用PING,倘若对方开防火墙就不行了。
      

  3.   

    char szHostName[128];
    struct hostent * pHost; 
    int i; 
    if( gethostname(szHostName, 128) == 0 )
    {
    pHost = gethostbyname(szHostName); 
    for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ ) 
    m_cbServerAddr.AddString(inet_ntoa (*(in_addr *)pHost->h_addr_list[i]));
    m_cbServerAddr.SetCurSel(0);
    }
      

  4.   

    看我最终的答案,分析一个主机字符串(可能是主机名,也可能是IP地址),该主机是否存在:
    BOOL ExistHostMachine( LPCTSTR strHostName )
    {
    ULONG uAddr = INADDR_NONE;
    ASSERT( NULL != strHostName );//LPHOSTENT#ifdef _UNICODE
    char strHost[HOSTNAME_SIZE] = { 0 };
    WideCharToMultiByte( CP_ACP, 0, strHostName, -1, strHost, HOSTNAME_SIZE, NULL, NULL );
    #else
    LPCTSTR strHost = strHostName;
    #endif

    uAddr = inet_addr( strHost ); 
    if( uAddr == INADDR_NONE )
    return ( gethostbyname( strHost ) != NULL);
    return (gethostbyaddr( (char*)&uAddr, sizeof(uAddr), AF_INET ) != NULL);
    }