您的位置:首页 > 理论基础 > 计算机网络

MFC自动获取网络地址函数实现----广播地址,网关,子网掩码

2015-08-13 09:51 876 查看
void CSetSignalBoxDlg::OnBnClickedButtonGetbroadcastaddr()

{ //注释部分为另一种获取IP方式,可略过

//char Name[255];//定义用于存放获得的主机名的变量

//char *IP;//定义IP地址变量

//CString strIP="";

//PHOSTENT hostinfo;

//if(gethostname (Name, sizeof(Name)) == 0)

//{

// //如果成功地将本地主机名存放入由name参数指定的缓冲区中

// if((hostinfo = gethostbyname(Name)) != NULL)

// {

// //这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo

// //为PHOSTENT型的变量,下面即将用到这个结构体

// IP = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);

// strIP.Format(IP);

// }

//}

CString strIP;

CString strMask;

CString strBroadcast;

CString strGateway;

in_addr broadcast;

PIP_ADAPTER_INFO pAdapterInfo; //IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名、网卡描述、网卡MAC地址、网卡IP等

PIP_ADAPTER_INFO pAdapter = NULL;

DWORD dwRetVal = 0;

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

ULONG ulOutBufLen;

//得到结构体大小,用于GetAdaptersInfo参数

ulOutBufLen = sizeof(IP_ADAPTER_INFO);

// 第一次调用GetAdapterInfo获取ulOutBufLen大小

//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中ulOutBufLen参数既是一个输入量也是一个输出量

if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)

{

free(pAdapterInfo);

pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);

}

if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)

{

pAdapter = pAdapterInfo;

while (pAdapter) //有多个网卡

{

strIP.Format(_T("%s"), pAdapter->IpAddressList.IpAddress.String);

strMask.Format(_T("%s"),pAdapter->IpAddressList.IpMask.String);

strGateway.Format(_T("%s"),pAdapter->GatewayList.IpAddress.String);

pAdapter = pAdapter->Next;

}

broadcast.S_un.S_addr =(inet_addr(strIP) & inet_addr(strMask))| (~inet_addr(strMask));

strBroadcast = inet_ntoa(broadcast);

}

SetDlgItemText(IDC_EDIT_ServerIP,strBroadcast);

SetDlgItemText(IDC_EDIT_SubnetMask,strMask);

SetDlgItemText(IDC_EDIT_Gateway,strGateway);

if (pAdapterInfo)

{

free(pAdapterInfo);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: