如何得到本机ip地址

解决方案 »

  1.   

    哈哈,试试。
    char szHostName[256];
    hostent *host;
    in_addr inaddr;
    //以下用于获取本机IP地址
    gethostname(szName,255);
    host=gethostbyname(szName);
    if(host)
       inaddr.s_addr=*((unsigned long*)host->h_addr_list[0]);
    else
       ShowMessage("获取本机IP失败!");
      

  2.   

    用gethostbyname()函数如下:
    hostent FAR* gethostbyname(const char FAR*name);
    name 为表示准备查找的主机的友好名。如果成功返回一个指向hosten结构的指针。用法楼上说的很清楚啦。
    struct hostent{
           char FAR* h_name;//正式的主机名
           char FAR* FAR* h_aliases;
           short h_addrtype;//返回的地址家族
           short h_length;//对h_addr_list中地址长度定义
           shor FAR* FAR* h_addr_list;//IP地址组成的数组,可能一个主机有几个ip所以是数组
    }
      

  3.   

    // 或取服务器本地ip地址
    char szHostName[50] = {0};
    CString ip;
    if( gethostname (szHostName, sizeof(szHostName)) == 0)
    {
    hostent* hostinfo = gethostbyname(szHostName) ;
    if( hostinfo != NULL )
    {
    ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
    }
    }
    CString szServerIP = ip;
      

  4.   

    我是这样做的
    CString sIP;//用于存放本机IP
    char hostname[200];//用于存放本机名字
    int  nRetCode;//返回值
    //获取本机名称
    nRetCode = gethostname(hostname,200);if (nRetCode != 0) {
             // An error has occurred
    int err=WSAGetLastError();
    CString message;
    message.Format(_T("错误:%d"),err);
    AfxMessageBox(message);
    } //获取本机IP
    //使用 GetAddressByName
    struct hostent FAR *lpHostEnt = gethostbyname (hostname);

    if (lpHostEnt == NULL) {
    // An error occurred. 
    int err=WSAGetLastError();
    CString message;
    message.Format(_T("错误:%d"),err);

    }
    LPSTR lpAddr = lpHostEnt->h_addr_list[0];
    if (lpAddr) {
    struct in_addr  inAddr;
    memmove (&inAddr, lpAddr, 4);
    sIP = inet_ntoa (inAddr);
    if (sIP.IsEmpty())
    AfxMessageBox("wrong");
    }
      

  5.   

    GetAdaptersInfo可以得到本机所有网络适配器的IP,网关,子网掩码和WINS,DNS.
      

  6.   

    GetAdaptersInfo可以得到网卡非常详细的信息
      

  7.   

    下面是我写的一个获得本机IP的函数.#include <winsock.h>
    #include <wsipx.h>
    #include <wsnwlink.h>char * get_ip()
    {   WORD wVersionRequested = MAKEWORD(1, 1);
       WSADATA wsaData;   if (WSAStartup(wVersionRequested, &wsaData)) 
          return 0;
       char hostname[256];
       int res = gethostname(hostname, sizeof(hostname));
       if (res != 0)
          return 0;   hostent* pHostent = gethostbyname(hostname);
       if (pHostent==NULL)
          return 0;   hostent& he = *pHostent;
       
       sockaddr_in sa;
     
       memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[0],he.h_length);
       WSACleanup();   return inet_ntoa(sa.sin_addr);
    }