如题?

解决方案 »

  1.   

    // 本程序报告本机上每一块网卡的IP地址
    // 命令行编译命令为:
    //
    // cl getip1.cpp wsock32.lib
    //
    // 请一定要在环境变量中正确指定LIB库的路径;可以运行vcvars32.bat
    //
    #include <winsock.h>
    #include <wsipx.h>
    #include <wsnwlink.h>
    #include <stdio.h>int main()
    {
       ////////////////
       // 初始化 Windows sockets API. 要求版本为 version 1.1
       //
       WORD wVersionRequested = MAKEWORD(1, 1);
       WSADATA wsaData;
       if (WSAStartup(wVersionRequested, &wsaData)) {
          printf("WSAStartup failed %s\n", WSAGetLastError());
          return -1;
       }   //////////////////
       // 获得主机名.
       //
       char hostname[256];
       int res = gethostname(hostname, sizeof(hostname));
       if (res != 0) {
          printf("Error: %u\n", WSAGetLastError());
          return -1;
       }
       printf("hostname=%s\n", hostname);
       ////////////////
       // 根据主机名获取主机信息. 
       //
       hostent* pHostent = gethostbyname(hostname);
       if (pHostent==NULL) {
          printf("Error: %u\n", WSAGetLastError());
          return -1;
       }
       //////////////////
       // 解析返回的hostent信息.
       //
       hostent& he = *pHostent;
       printf("name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
          he.h_name, he.h_aliases, he.h_addrtype, he.h_length);
       
       sockaddr_in sa;
       for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
          memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
          // 输出机器的IP地址.
          printf("Address: %s\n", inet_ntoa(sa.sin_addr)); // 显示地址串
       }
       //////////////////
       // 终止 Windows sockets API
       //
       WSACleanup();
       return 0;
    }
      

  2.   

    CString LocalHostAddress()
    {
    char hostname[128];
    char Address[20];
    if (gethostname(hostname, sizeof(hostname)) != SOCKET_ERROR)
    {
    XTApp->Host_Name=hostname;
    HOSTENT *Hostent;
    Hostent = gethostbyname(hostname);
    if (Hostent != NULL)
    {
    int j;
    int i =0;
    memset(Address, 0, sizeof(Address));
    for (j=0; j<4; j++)
    {
    sprintf(Address, "%s%d.",Address, (unsigned int)((unsigned char*)Hostent->h_addr_list[i])[j]);
    }
    }
    }
    CString Ips = Address;
    CString Re = Ips.Left(strlen(Ips)-1);     
    return Re;
    }
      

  3.   

    没那样复杂吧char *GetLocalIP()
    {
       struct in_addr localaddr;
       struct hostent *hp=NULL;
       char hostname[50];
       gethostname(hostname,49);//主机名
       hp=gethostbyname(hostname);主机信息
       memcpy(&localaddr,hp->h_addr,hp->length);//地址
       return inet_ntoa(localaddr);//变成char *}
      

  4.   

    照 dawndu(东南飞)那样做就可以了。
      

  5.   

    //获取本机IP地址
    void CAviTestDlg::GetIP(char* IP)
    {
    struct in_addr localaddr;
    struct hostent *hp=NULL;
    char hostname[50];
    gethostname(hostname,49);//主机名
    AfxMessageBox(hostname);//----此处是空白信息
    hp=gethostbyname(hostname);//主机信息
    AfxMessageBox("1"); //--此处显示,
    memcpy(&localaddr,hp->h_addr,hp->h_length);//地址--到这里就死了
    AfxMessageBox("2");
    IP=inet_ntoa(localaddr);//变成char *
    AfxMessageBox("3");
    }