name为机器名,定义的为CString类型;
LPCSTR p;
p=(LPCSTR)name;
struct hostent FAR *gethostbyname(p);
struct hostent *pHost;
pHost=gethostbyname(p);
pHost取不到着得,而P我中有正确的机器名
char buf[1024];
sprintf(buf, "name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
pHost->h_name, pHost->h_aliases, pHost->h_addrtype, pHost->h_length);
sockaddr_in sa;
for (int nAdapter=0; pHost->h_addr_list[nAdapter]; nAdapter++)
{
    memcpy ( &sa.sin_addr.s_addr, pHost->h_addr_list[nAdapter],pHost->h_length);
        // 输出机器的IP地址.
    AfxMessageBox(inet_ntoa(sa.sin_addr)); // 显示地址串
}

解决方案 »

  1.   

    哦,写错了 这个是要问的问题
    name为机器名,定义的为CString类型;
    LPCSTR p;
    p=(LPCSTR)name;
    struct hostent *pHost;
    pHost=gethostbyname((char *)p);
    pHost取不到着得,而P我中有正确的机器名
    char buf[1024];
    sprintf(buf, "name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
    pHost->h_name, pHost->h_aliases, pHost->h_addrtype, pHost->h_length);
    sockaddr_in sa;
    for (int nAdapter=0; pHost->h_addr_list[nAdapter]; nAdapter++)
    {
        memcpy ( &sa.sin_addr.s_addr, pHost->h_addr_list[nAdapter],pHost->h_length);
            // 输出机器的IP地址.
        AfxMessageBox(inet_ntoa(sa.sin_addr)); // 显示地址串
    }
      

  2.   

    WSADATA sd;
    int ret = WSAStartup(MAKEWORD(2, 2), &sd);
    hostent *host;
    host = gethostbyname("computername");
      

  3.   

    int nLen=20;
    char hostname[20];
    gethostname(hostname,nLen);        // 获得本机主机名struct hostent FAR* lpHostEnt = gethostbyname(strHostName);
      

  4.   

    gethostbyname有可能会失败!!!!
    所以应该这么处理
    CSockAddr CBlockingSocket::GetHostByName(const char* pchName, const USHORT ushPort /* = 0 */)
    {
    hostent* pHostEnt = gethostbyname(pchName);

    if(pHostEnt == NULL) {
    CSockAddr sockAddr(pchName,ushPort);
    //throw new CBlockingSocketException("GetHostByName");
    return sockAddr;
    }
    ULONG* pulAddr = (ULONG*) pHostEnt->h_addr_list[0];
    SOCKADDR_IN sockTemp;
    sockTemp.sin_family = AF_INET;
    sockTemp.sin_port = htons(ushPort);
    sockTemp.sin_addr.s_addr = *pulAddr; // address is already in network byte order
    return sockTemp;
    }
      

  5.   

    WSADATA wsdata;
    char szName[256];if(WSAStartup(MAKEWORD(2,0),&wsdata) != 0)
    {
       if(gethostname(szName,256) != 0)
       {
         AfxMessageBox(szName);
       }
    }