工控编程吧
标题:
328上位机VC MFC通过计算机名称获得IP地址
[打印本页]
作者:
qq263946146
时间:
2016-9-22 15:00
标题:
328上位机VC MFC通过计算机名称获得IP地址
(, 下载次数: 2)
上传
点击文件名下载附件
通过计算机名称获得IP地址
功能展示
相同网络下如果两台电脑IP相同,计算机就会提示IP冲突,每台计算机都有一唯一的名称,可以通过计算机名称获得其对应的IP地址,我们当前例程就实现了这一功能,效果如图,点击<获取本机IP>例程就会将获得的IP地址走入地址控件,如果获取失败会提示相应信息;
要点提示
在winsock中申明有一个函数Gethostbyname()这个函数可以通过计算机名获得其相关的信息,其中包括IP地址;
struct hostent FAR * gethostbyname ( const char FAR * name ); name 为包含计算机名称的字符串,如果没有错误发生,gethostbyname()返回如上所述的一个指向hostent结构的指针,否则,返回一个空指针。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码
实现功能
1.新建基于对话框的应用程序
2.依照例程界面添加一按钮控件<获取本机IP>及一IP地址控件IDC_IPADDRESS1,关联按钮的点击函数,实现IP的获取
#include "afxsock.h"
void CGkbc8Dlg::OnGetip()
{
WSAData wsaData;
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{
MessageBox("获取IP失败");
return;
}
char host_name[255];
if(gethostname(host_name,sizeof(host_name))==SOCKET_ERROR)
{
MessageBox("获取主机名失败","",MB_OK);
return ;
}
struct hostent*phe=gethostbyname(host_name);
if(phe==0)
{
MessageBox("获取IP失败","",MB_OK);
return;
}
struct in_addr addr;
memcpy(&addr,phe->h_addr_list[0],sizeof(addr));
inet_ntoa(addr);
CIPAddressCtrl* pIP = (CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1);//IP控件指针
pIP->SetWindowText(inet_ntoa(addr));
WSACleanup();
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/19f648922906432f245c11035717d14f/0/0/w_19rstj06ph.swf-albumId=6347968409-tvId=6347968409-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4