我是电信拨号宽带上网络的,请问如何获得本机器IP地址,好象本地连接和宽带拨号的IP地址是不同的,我查了,本地连接IP:192.168.1.4,宽带拨号IP:220.174.2.155,我如何在winsocket中分别获得这两个IP地址???
gethostname(lname,sizeof(lname)-1);phost=gethostbyname(lname);好象只能获得本地连接IP:192.168.1.4.

解决方案 »

  1.   

    使用HOSTENT结构中的h_addr_list列表获取多ip地址
      

  2.   

    list后面的没有了嘛?
    不要只去list[0]
      

  3.   

    struct hostent FAR * lpHostEnt=gethostbyname(sHostName);
    if(lpHostEnt==NULL)
    {
    //产生错误
    sIpAddress=_T("");
    return GetLastError();
    }
    //获取IP
    LPSTR lpAddr=lpHostEnt->h_addr_list[0];
    if(lpAddr)
    {
    struct in_addr inAddr;
    memmove(&inAddr,lpAddr,4);
    //转换为标准格式
    sIpAddress=inet_ntoa(inAddr);
    if(sIpAddress.IsEmpty())
    sIpAddress=_T("没有取得");
    }
    return 0;
      

  4.   

    //对本机的IP地址和计算机名称进行查询
    char szHostName[128];//将计算机名称放入数组中
    struct hostent *pHost;//定义一个结构体指针变量pHost
    //通过gethostname函数来获取计算机的名称
    if(!gethostname(szHostName,sizeof(szHostName)))//获取成功
    {
    SetDlgItemText(IDC_NAME,szHostName);
    //通过函数gethostbyname和计算机的名称来获取计算机的IP地址
    pHost = gethostbyname(szHostName);
    //将所获取的IP地址转化为真正的IP地址
    LPCSTR IPAddress = inet_ntoa(*(struct in_addr*)(*pHost->h_addr_list));
    SetDlgItemText(IDC_IP,IPAddress);
    }
    else
    {
    AfxMessageBox("<信息未知>");
    }这样就是对本地的IP进行获取阿 ~~~
      

  5.   

    我最近也在弄这个问题,我的需求是看自己是不是公网ip?在网上看到用GetAdaptersInfo()可以,但需要
      Header: Declared in Iphlpapi.h.
      Library: Use Iphlpapi.lib.据说要新的SDK才有这两个文件。借地方用一下谁有这两个文件,发给我一份:[email protected]