枚举本地所有的IP地址,有什么办法可以解决呢??

解决方案 »

  1.   

    m_structHostent = gethostbyname(&m_pEnumResource[i].lpRemoteName[2]);
    m_cListClient.InsertItem(m_dwIndex, &m_pEnumResource[i].lpRemoteName[2]);
    TRACE("%s\n",&m_pEnumResource[i].lpRemoteName[2]);
    sprintf(m_FullString,"%s",&m_pEnumResource[i].lpRemoteName[2]);
    if (m_structHostent != NULL)
    {
    // 这个循环获取ip地址
    for(int j = 0; m_structHostent->h_addr_list[j] != NULL; j++)
    {
    memcpy(&(dest.sin_addr), m_structHostent->h_addr_list[j],m_structHostent->h_length);
    m_strTemp = inet_ntoa(dest.sin_addr);
    m_cListClient.SetItemText(m_dwIndex,j + 1,m_strTemp);
    sprintf(m_FullString,"%s %s",m_FullString,m_strTemp);
    }      
    m_dwIndex = m_dwIndex + 1;
    m_cListClient.UpdateWindow();
    fprintf(m_hFile,"%s\n",m_FullString);
    }
      

  2.   

    int GetAllIP(char *title_M)
    {
    int i;
    int ret;
    char b000[150];
    sock_to1=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    if(sock_to1==SOCKET_ERROR) { write_buf("Create Socket Failed\n ",false);return 1; }


    ret = WSAIoctl(sock_to1,SIO_ADDRESS_LIST_QUERY,NULL,0,recvbuf,1024*8-1,&dwBytesRet,NULL,NULL);
    if (ret == SOCKET_ERROR) {write_buf("get adaptor list failed.\n",false); return 1;}

    slist=(SOCKET_ADDRESS_LIST*)&recvbuf; gethostname((char FAR *)title_M,255);

    if(slist->iAddressCount>=1) { 
    for(i=0;i<slist->iAddressCount;i++)
    {
    strcpy(b000,inet_ntoa(((SOCKADDR_IN*)slist->Address[i].lpSockaddr)->sin_addr));
    printf(b000);

    }
    }
    return 0;
    }
      

  3.   


    char   recvbuf[MAX_TEXT_SIZE];
    SOCKET_ADDRESS_LIST *slist;
    MAX_TEXT_SIZE应大一些,否刚,会取不出来