基于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和名称已经完成。


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

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


  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Win10 VS2013 ************************************************ * BOOL GetDiskSpaceInfo(LPCSTR pszDrive * 功能 根据输入的驱动器,获取磁盘总容量 * 空闲空间、簇数量等磁盘信息 * 参数 驱动器根路径,比如“D:\”。 ************************************************ * void GetTime() * 功能 获取并显示本地与系统时间 ************************************************ * void GetLang() * 功能 获取并显示系统的默认语言 ************************************************ * void ShowVersionInfo() * 功能 获取并显示系统版本信息 ************************************************ * void ShowSystemInfo() * 功能 获取并显示硬件相关信息 ************************************************ *void GetFolders() * 功能 获取系统目录等信息 ************************************************ *void WINAPI EnumProcess1() * 功能 调用EnumProcess遍历进程 * 并调用ListProcessModules1函数和 * ListProcessThreads函数列举模块 * 和线程 ************************************************ * VOID ListProcessModules1( DWORD dwPID ) * 功能 调用EnumProcessModules函数 * 列举和显示进程加载的模块 * * 参数 DWORD dwPID 进程PID ************************************************ * VOID ListProcessThreads( DWORD dwPID ) * 功能 调用Thread32First和Thread32Next * 显示一个进程的线程 * * 参数 DWORD dwPID 进程PID ************************************************ * VOID PrintError( LPTSTR msg ) * 功能 打印出错信息 * * 参数 LPTSTR msg ************************************************ * void GetDriveInfo( LPCTSTR lpRootPath) * 功能 返 回 指 定 驱 动 器 的 类 型。 * * 参数 lpRootPathName ************************************************ * void GetSystemMetric(int nIndex) * 功能 返 回 显 示 器 分 辨 率。 * * 参数 ************************************************ * void GetKeyboardInfo() * 功能 返回键盘类型。 * * 参数 *************************************************

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值