//*************************************   
    WORD wVersionRequested;
    WSADATA wsaData;
    if( WSAStartup(wVersionRequested,&wsaData) == 0)  
    {    
       struct hostent * phost; 
       if((phost = gethostbyname(""))!=NULL)
             m_computername = (CString)phost->h_name;  
       WSACleanup();
     }
     //*************************************得当前主机名     

解决方案 »

  1.   

    kane_yj()写的在2000下可以得到计算机名,但是在98下就得不到了。
    以上得代码编译是成功的。
      

  2.   

    1.在应用类和你要找主机名的类中加入头文件"afxsock.h"
    2.在应用类InitInstance()中加入初始化:AfxSocketInit();void CDevDataDlg::OnBnClickedButton1()
    {
    // TODO:在此添加控件通知处理程序代码 CString m_IP,m_FullName;
    char m_HostName[256];
    struct hostent *hp; gethostname((char*)m_HostName,255);
    hp=gethostbyname(m_HostName);
    if(hp==NULL)
    {
    AfxMessageBox("读取主机IP地址错误!");
    return;
    }
    for(int i=0;hp->h_addr_list[i]!=NULL;i++)
    {
    for(int j=0;j<hp->h_length;j++)
    {
    CString addr;
    if(j>0)
    m_IP+=".";
    addr.Format("%u",(unsigned int)((unsigned char*)hp->h_addr_list[i])[j]);
    m_IP+=addr;
    }
    } int addr=inet_addr(m_IP);
    hp=gethostbyaddr((char*)&addr,4,AF_INET);
    if(hp==NULL)
    {
    AfxMessageBox("读取主机名错误!");
    return;
    }
    sprintf(m_HostName,"%s",hp->h_name);
    m_FullName.SetString(m_HostName); for(i=0;i<(int)strlen(m_HostName);i++)
    {
    if(m_HostName[i]=='.')
    {
    m_HostName[i]=NULL;
    break;
    }
    }
    CString temp;
    temp.Format("IP地址为:%s\n\r主机名为:%s\n\r全 名 为:%s  ",m_IP,m_HostName,m_FullName);
    AfxMessageBox(temp);
    }
    运行结果为:
    IP地址为:192.168.198.7
    主机名为:ADMIT06
    全 名 为:ADMIT06.ncvillas.com