基于VS2013 MFC获取计算机的IP和名称

今天要介绍的是如何获取本机的IP和名称,这个功能在做TCP通信时变得更为重要。

第一步:打开VS2013,新建项目,创建MFC应用程序,选择对话框,点击完成。

第二步:在对话框中放置两个Edit Control控件,一个用来显示IP,另一个用来显示计算机名称。如下图:

        为了更好的区分两个控件,将他们的ID分别改成:IDC_EDIT_IP_LOCAL和IDC_EDIT_HOST_NAME


                                                    (接下来开始代码的书写了)

第三步:在***Dlg.h文件中定义两个字符串变量,并且声明获取计算机名称和IP的函数GetLocalHostIPName(CString &sLocalName, CString &sIpAddress)。

CString m_strLocalIP; //本机计算机IP
	CString m_strLocalName; //本机计算机名
	int GetLocalHostIPName(CString &sLocalName, CString &sIpAddress); //获取本机名称IP

第四步:在***Dlg.cpp文件中定义函数GetLocalHostIPName(CString &sLocalName, CString &sIpAddress)。

int CMFCApplication1Dlg::GetLocalHostIPName(CString &sLocalName,CString &sIpAddress)
{
	char szLocalName[256];//定义
	WSADATA wsaData;//定义套接字存储变量
	if (WSAStartup(MAKEWORD(2, 0), &wsaData) == 0)//<span class="con">windows初始化socket网络库,申请2,0的版本,windows socket编程必<img class="selectsearch-hide" id="selectsearch-icon" alt="搜索" src="http://img.baidu.com/img/iknow/qb/select-search.png" />须先初始化。如果出错,则返回0</span>
	{
		if (gethostname(szLocalName, sizeof(szLocalName)) != 0)//产生错误
		{
			sLocalName = _T("没有取得");
			WSACleanup();
			return GetLastError();
		}
		else
		{
			sLocalName = szLocalName;//用sLocalName变量存储获得的计算机名称
			struct hostent FAR * lpHostEnt = gethostbyname(sLocalName);
			if (lpHostEnt == NULL)//错误
			{
				sIpAddress = _T("");
				WSACleanup();
				return GetLastError();
			}
			LPSTR lpAddr = lpHostEnt->h_addr_list[0];//获取IP地址
			if (lpAddr)
			{
				struct in_addr inAddr;
				memmove(&inAddr, lpAddr, 4);
				sIpAddress = inet_ntoa(inAddr);//转换为标准格式
				if (sIpAddress.IsEmpty())
				{
					sIpAddress = _T("没有取得");
					WSACleanup();
					return 1;
				}
			}
		}
	}
	WSACleanup();//清空套接字初始化变量
	return 0;
}

第五步:在***Dlg.cpp的OnInitDialog()方法中调用GetLocalHostIPName(CString &sLocalName,CString &sIpAddress)函数,并将结果显示在Edit Control控件中

GetLocalHostIPName(m_strLocalName,m_strLocalIP);//调用函数获得IP和计算机名称
	SetDlgItemText(IDC_EDIT_IP_LOCAL, m_strLocalIP);//将计算机的IP显示在IP控件中
	SetDlgItemText(IDC_EDIT_HOST_NAME, m_strLocalName);//将计算机的名称显示在名称控件中

至此,基于vs2013 MFC获得计算机的IP和名称已经完成。


在运行时可能会遇到类型无法转换的问题,这个情况不用着急,解决步骤如下:

点击菜单栏里的《项目》按钮——>在下拉菜单栏中点击《***属性》——>点击左侧的《配置属性》——>在右侧找到《字符集》——>点击下拉菜单,选择《使用多字节字符集》。这样就好了!配图如下:


猜你喜欢

转载自blog.csdn.net/ifreewolf_csdn/article/details/52502215
今日推荐