当前位置:
文档之家› 获取计算机IP地址和主机名及MAC地址
获取计算机IP地址和主机名及MAC地址
int nRetCode;
nRetCode = gethostname(szHostName,sizeof(szHostName));
if(nRetCode != 0)
{
return WSAGetLastError();
}
sHostName = szHostName;
return 0;
}
获得IP地址
指导教师意见
签名: 年 月 日
注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。
答:是入口参数。
2.函数GetIPAddress(const Cstring& sHostName,Cstring& sIPAddress)中的形参是出口参数还是入口参数?
答:是入口参数。
3.在上面程序中我们并没有让确定按钮发挥作用,看看能否将程序改为不要一运行就能在窗口上看到结果,而需要点击确定按钮后才看到结果,请说明如何做?
(3)在弹出的MFC AppWizard-Step1of 4对话框中选择Dialog Based(对话框基础)单选项,然后单击下一步按钮。
(4)在MFC AppWizard-Step2 of 4对话框中注意勾选windows sockets支持复选框,在标题对话框中输入想显示的窗口标题(例如:获取主机名和IP地址),然后单击下一步按钮。
{
free(pAdapterInfo);
pAdapterInfo=(IP_ADAPTER_INFO *)malloc(ulOutBufLen);
}
if((dwRetVal=GetAdaptersInfo(pAdapterInfo,&ulOutBufLen))==NO_ERROR)
{
pAdapter=pAdapterInfo;
(5)其余步骤选择默认值。
(6)最后在MFC AppWizard-Step4 of 4对话框中单击完成按钮,完成项目的建立。
实验结果
主要实现函数程序清单:
//获得主机名
int CWinsock_getIPDlg::GetLocalHostName(CString &sHostName)
{
char szHostName[256];
答:进入其成员函数,添加如下语句:
int nRetCode;
nRetCode=GetLocalHostName(m_sHostName);
nRetCode=GetIPAddress(m_sHostName,m_sIPAddress);
GetMAC(m_sMAC);
UpdateData(FALSE);
int CWinsock_getIPDlg::GetIPAddress(const CString &sHostName, CString &sIPAddress)
{
struct hostent FAR* lpHostEnt = gethostbyname(sHostName);
if(lpHostEnt == NULL)
实验原理
要通过本次试验初步了解Winsock程序的编制,并掌握如何利用MFC进行程序设计,为以后自己编制类似的程序打下良好的基础。
实验内容
利用winsock提供的相关函数进行MFC程序的编制,要求获取计算机IP地址和主机名,并显示在窗口上。
实验环境
PC机
VC++6.0环境
实验步骤
1.启动Visual C++6.0开发环境
pAdapter->Address[5]);
}
}
对确定键的实现
void CWinsock_getIPDlg::OnOK()
{
// TODO: Add extra validation here
int nRetCode;
nRetCode=GetLocalHostName(m_sHostName);
nRetCode=GetIPAddress(m_sHostName,m_sIPAddress);
{
return WSAGetLastError();
}
LPSTR lpAddr = lpHostEnt->h_addr_list[0];
if(lpAddr)
{
struct in_addr inAddr;
memmove(&inAddr,lpAddr,4);
sIPAddress = inet_ntoa(inAddr);
贵州大学实验报告
学院:计信学院专业: 实验组
实验时间
指导教师
成绩
实验项目名称
获取计算机IP地址和主机名及MAC地址
实验目的
1、掌握MFC程序设计的基本方法;
2、了解在该网络环境下利用Winsock获取IP地址的方法及实现原理;
3、了解在该网络环境下利用Winsock获取计算机名的方法及实现原理。
GetMAC(m_sMAC);
UpdateData(FALSE);
}
void CWinsock_getIPDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
点击确定后:
点击取消。
实验总结
1.函数GetLocalHostName(Cstring& sHostName)中的形参是出口参数还是入口参数?
if(sIPAddress.IsEmpty())
{
return 0;
}
}
return 0;
}
获得MAC地址
void CWinsock_getIPDlg::GetMAC(CString &sMAC)
{
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter=NULL;
从“开始”菜单中选择“程序| Microsoft Visual Studio 6.0 | Microsoft Visual C++ 6.0”,显示Visual C++6.0开发环境窗口。
2.创建一个项目
(1)单击File菜单中的New选项,显示New(新建)对话框。
(2)单击Project(项目)标签,在Project选项卡中,选择MFC AppWizard(exe)(MFC应用程序向导)。在Location(位置)文本框中指定一个路径,在Project Name(项目名称)文本框中为项目输入一个名字(例如:Winsock_getIP),单击OK按钮。
DWORD dwRetVal;
pAdapterInfo=(IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen=sizeof(IP_ADAPTER_INFO);
if (GetAdaptersInfo(pAdapterInfo,&ulOutBufLen)==ERROR_BUFFER_OVERFLOW)
if(pAdapter)
sMAC.Format("%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x",
pAdapter->Address[0],
pAdapter->Address[1],
pAdapter->Address[2],
pAdapter->Address[3],
pAdapter->Address[4],