hur.cn - 华软网

 热门搜索

MFC 获取本机IP偶尔错误的问题

  作者:未知    来源:网络    更新时间:2011/1/13
用的是gethostbyname方法,猎取到的IP有好几个,有我当前当地连接的IP地址,另有虚拟机的两个IP地址,甚至另有我以前删除过的当地连接的IP地址...
请问我如何能区分呢??
我只想要我当前运用的IP地址,谢谢帮助!!!
---华软 网友回答---
GetAdaptersInfo

C++">// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter. 
// Note that this sample code only prints out the 
// first entry for the IP address/mask, gateway,
// and secondary WINS server for each adapter. 

PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;

/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];    
errno_t error;

pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);

// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
  free(pAdapterInfo);
  pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); 
  if (pAdapterInfo == NULL) {
    printf("Error allocating memory needed to call GetAdaptersinfo\n");
    return 1;
}

if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
  pAdapter = pAdapterInfo;
  while (pAdapter) {
    printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
    printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
    printf("\tAdapter Addr: \t");
    for (UINT i = 0; i < pAdapter->AddressLength; i++) {
      if (i == (pAdapter->AddressLength - 1))
         printf("%.2X\n",(int)pAdapter->Address[i]);
      else
        printf("%.2X-",(int)pAdapter->Address[i]);
    }
    printf("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
    printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);

    printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
    printf("\t***\n");

    if (pAdapter->DhcpEnabled) {
      printf("\tDHCP Enabled: Yes\n");
      printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);

      printf("\tLease Obtained: "); 
      /* Display local time */
      error = _localtime32_s(&newtime, &pAdapter->LeaseObtained); 
      if (error)
        printf("\tInvalid Argument to _localtime32_s\n");
      else {
        // Convert to an ASCII representation 
        error = asctime_s(buffer, 32, &newtime);
        if (error)
          printf("Invalid Argument to asctime_s\n");
        else 
          /* asctime_s returns the string terminated by \n\0 */
          printf("%s", buffer);
      }

      printf("\tLease Expires:  ");
      error = _localtime32_s(&newtime, &pAdapter->LeaseExpires); 
      if (error)
        printf("Invalid Argument to _localtime32_s\n");
      else {
        // Convert to an ASCII representation 
        error = asctime_s(buffer, 32, &newtime);
        if (error)
          printf("Invalid Argument to asctime_s\n");
        else  
          /* asctime_s returns the string terminated by \n\0 */
          printf("%s", buffer);
      }
    }
    else
      printf("\tDHCP Enabled: No\n");
    
    if (pAdapter->HaveWins) {
      printf("\tHave Wins: Yes\n");
      printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
      printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
    }
    else
      printf("\tHave Wins: No\n");
    pAdapter = pAdapter->Next;
  }
}
else {
  printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

if (pAdapterInfo)
  free(pAdapterInfo);
}


如果你机器接了多块网卡,还都能连上网,没啥好措施区分一下,就都找出来,一个一个对应一下吧,要用哪一个,选择一下!
---华软网友回复---
  class="deleted_message"> 该回复于2011-01-13 16:25:06被版主删除
---华软网友回复---
谢谢#1楼兄弟的回答。。。我尝试了下,发现能掏出所有的IP,这个功能我已经实现了的
我需要的就是用代码挑出我要的IP地址,不可能让人去自己选摘要哪一个的。

---华软网友回复---
  class="deleted_message"> 该回复于2011-01-14 08:40:51被版主删除
---华软网友回复---
引用 4 楼 jiratao 的回复:
沉的太快了~~~列位帮帮助啊。。。
只可帮你顶顶      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。