remoteHost = gethostbyname(cip);
if (remoteHost != NULL)
{
//方法一:
memcpy(&HostAddr.sin_addr.S_un.S_addr ,&remoteHost->h_addr_list[0],remoteHost->h_length);
ipstr=inet_ntoa(HostAddr.sin_addr);
printf("IP:%s",ipstr);
/* //方法二:
pptr = remoteHost->h_addr_list;
l1 = inet_addr(*pptr);
ipstr = inet_ntoa(addr1);
printf("official hostname:%s\n",remoteHost->h_name);
printf("  alias:%s\n",*pptr);
for(;*pptr!=NULL;pptr++)
printf("IP address: %s\n", inet_ntoa(addr1));
*/
两个办法都无法获得正确IP,请指正。

解决方案 »

  1.   

    MSDN原文:   hostent->h_addr_lisst 
        表示的是主机的ip地址,注意,这个是以网络字节序存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话,需要调用inet_ntop()。
      

  2.   

        Hostent = (struct hostent*)malloc(sizeof(struct hostent));
        Hostent = gethostbyname(HostName);
    int i=0;
    char **ptr=Hostent->h_addr_list;
    for(; ptr[i];i++)
    {
    printf("\n\n第%d个网络接口:\n", i+1 );
    printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)ptr[i]));
    }
      

  3.   

    楼主已经使用了:
    inet_ntoa
    The inet_ntoa function converts an (Ipv4) Internet network address into a string in Internet standard dotted format.
    =================
    所以这样没问题
      

  4.   

    CString GetIPAddress(const CString &sHostName)
    {
    struct hostent FAR *lpHostEnt = gethostbyname (sHostName); if (lpHostEnt == NULL)  return ""; LPSTR lpAddr = lpHostEnt->h_addr_list[0];
    if (lpAddr) {
    struct in_addr  inAddr;
    memmove (&inAddr, lpAddr, 4);
    CString strIP = inet_ntoa (inAddr);
    if (strIP.IsEmpty())
    return "";
                    else
                            return strIP;
    }
    }
      

  5.   


    CString CTestDlg::GetIPAddress(const CString &sHostName)
    {
    CString strIP = "";
    struct hostent FAR *lpHostEnt = gethostbyname (sHostName);
    if (lpHostEnt == NULL) return "";
    LPSTR lpAddr = lpHostEnt->h_addr_list[0];
    if (lpAddr)
    {
    struct in_addr  inAddr;
    memmove (&inAddr, lpAddr, 4);
    strIP = inet_ntoa (inAddr);
    if (sIPAddress.IsEmpty()) return "";
    }
    else return "";

    return strIP;
    }