码迷,mamicode.com
首页 > 编程语言 > 详细

MFC自动获取广播地址函数实现

时间:2015-08-13 12:24:28      阅读:388      评论:0      收藏:0      [点我收藏+]

标签:

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;
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);
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);
if (pAdapterInfo)
{
free(pAdapterInfo);
}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

MFC自动获取广播地址函数实现

标签:

原文地址:http://blog.csdn.net/lxw907304340/article/details/47606551

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!