C++实训文档(网络应用编程)_第1页
C++实训文档(网络应用编程)_第2页
C++实训文档(网络应用编程)_第3页
C++实训文档(网络应用编程)_第4页
C++实训文档(网络应用编程)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、苏 州 市 职 业 大 学实习(实训)报告 名称 实用网络程序设计实训 2013年 6 月28日至 2013年 6 月 29 日共 1 周院(部) 计算机工程学院 班 级 姓 名 学 号 院 长 李金祥 系 主 任 刘昭斌 指导教师 关辉 于复生1、 实训地点:信2-5062、 实训时间:2013.6.282013.6.293、 小组成员:4、具体内容:本地计算机信息的查询4.1程序设计分析与原理通过所学知识开发一个简单的查询工具,查询本机的基本配置信息以及基本网络配置,如计算机名、IP地址、MAC地址、网关、子网掩码等信息。利用Visio简单设计程序界面,方便用户查询操作。根据计算机相关信息

2、的特点,如网络中IP地址的唯一性,MAC的唯一性等,可以使用相应函数直接获取信息,而对于子网掩码以及网关则需要先获得本地计算机的网络信息后才能获得子网掩码和网关的设置信息。主要原理功能介绍:A查询本地计算机名和IP地址:为了在网络上区分不同的计算机,人们给每台计算机分配了一组用于标识该计算机的数字,称为IP地址。为了便于记忆,人们都希望使用主机名。可使用WinSock库提供的函数直接获得。流程图:开始初始化WinSock使用gethostname、gethostbyname函数获得本机主机名,以及IP地址信息显示主机名与IP地址信息关闭WinSock结束B查询本机MAC地址:一个网卡对应唯一一

3、个MAC地址,采用VC提供的NetBIOS网络编程接口可轻松获得。流程图:结 束向网卡发送NCBASTAT命令获取网卡地址还有下一块网卡吗?吗?向网卡发送NCBRESET命令进行初始化取一个网卡获取网卡的数目、编号等信息列表调用Netbios,向网卡发送NCBENUM定义NCB结构在NCB结构中设置NCBENUM命令YesNoC查询本机子网掩码:又称网络掩码。唯一作用是将某个IP地址划分成网络地址和主机地址。因此通过使用GetAdaptersInfo()获得本机网络信息后可得到子网掩码。流程图:获得子网掩码关闭开始引入头文件Iphlpapi.h,获得Iphlpapi.lib支持。 使用GetA

4、daptersInfo()函数获得本地网络信息D查询本机网关信息:又称网间连接器。使用GetAdaptersInfo()获得本机网络信息后可得到网关信息。流程图:获得子网掩码关闭开始引入头文件Iphlpapi.h,获得Iphlpapi.lib支持。 使用GetAdaptersInfo()函数获得本地网络信息程序工程创建:(1)打开VS2005,创建工程选择MFC应用程序,如图1:图1选择MFC应用程序(2)选择“基本对话框”并取消“Unicode”库,默认创建完成。如图2:图2创建基本对话框(3)设计界面如图3:图3设计界面(4)创建如图1界面,并对列表框填加成员变量,如图4:图4添加成员变量

5、4.2程序函数代码介绍A“查询计算机名”按钮响应的函数源代码:void CGetLocalDlg:OnBnClickedGetname()WSADATA wsaData;int ret;if(ret=WSAStartup(MAKEWORD(2,2),&wsaData)!=0)return;char HostName128;BOOL bRet;bRet=gethostname(HostName,128);/使用gethostname函数直接获取主机名if(bRet!=0)MessageBox("获取计算机名错误!","提示");return;CSt

6、ring strMeg=HostName;strMeg="本机的计算机名是:"+strMeg;m_show.InsertString(-1,strMeg);WSACleanup();B“查询IP地址”按钮响应的函数源代码:void CGetLocalDlg:OnBnClickedGetip()/ TODO: 在此添加控件通知处理程序代码WSADATA wsaData;int ret;if(ret=WSAStartup(MAKEWORD(2,2),&wsaData)!=0)return;char HostName128;struct hostent* pHost;ge

7、thostname(HostName,128);pHost=gethostbyname(HostName);int i=0;CString strIP;while(pHost->h_addr_listi!=NULL)/使用WinSock提供的函数库直接获得本机IP地址strIP=inet_ntoa(*(struct in_addr *)pHost->h_addr_listi);CString str="本机的IP地址:"+strIP;m_show.InsertString(-1,str);i+;WSACleanup();C“查询MAC地址”按钮响应的函数源代码v

8、oid CGetLocalDlg:OnBnClickedGetmac()/ TODO: 在此添加控件通知处理程序代码NCB ncb; /网络控制块 LANA_ENUM lana_enum; /该结构包含网卡数目及其索引 memset(&ncb, 0, sizeof(ncb) ); /NCB结构清零 ncb.ncb_command = NCBENUM; /向网卡发送 NCBENUM 命令,以获取当前计算机的网卡信息, /如有多少个网卡,每张网卡的编号等 ncb.ncb_buffer = (unsigned char *)&lana_enum; ncb.ncb_length = s

9、izeof(lana_enum); UCHAR uRetCode = Netbios(&ncb);int num; /标识网卡个数 MAC_ADDRESS mac_addr5;/假设最多有5个网卡if (uRetCode != 0) return;num = lana_enum.length; /对每一张网卡,以其网卡编号为输入编号,获取其 MAC 地址 for (int i = 0; i < num; i+) memset(&ncb, 0, sizeof(ncb) ); /NCB结构重新清零ASTAT Adapter;/对选定的网卡发送一个 NCBRESET 命令,以便

10、进行初始化 ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = lana_enum.lanai; uRetCode = Netbios(&ncb ); /指定返回的信息存放的变量 memset(&ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = lana_enum.lanai; /指定网卡号strcpy(char *)ncb.ncb_callname, "*" ); ncb.ncb_buffer = (unsigned char

11、 *)&Adapter; /指定返回的信息存放的变量 Adapter ncb.ncb_length = sizeof(Adapter); /接着,发送 NCBASTAT 命令以获取网卡的信息 uRetCode = Netbios(&ncb ); mac_addri.b1 = Adapter.adapt.adapter_address0;mac_addri.b2 = Adapter.adapt.adapter_address1;mac_addri.b3 = Adapter.adapt.adapter_address2;mac_addri.b4 = Adapter.adapt.ad

12、apter_address3;mac_addri.b5 = Adapter.adapt.adapter_address4;mac_addri.b6 = Adapter.adapt.adapter_address5;CString strMac;strMac.Format("第%d个MAC: %02X-%02X-%02X-%02X-%02X-%02X",i+1, mac_addri.b1, mac_addri.b2, mac_addri.b3, mac_addri.b4, mac_addri.b5, mac_addri.b6);m_show.InsertString(-1,s

13、trMac);D“查询子网掩码”按钮响应的函数源代码void CGetLocalDlg:OnBnClickedGetsubnet()/ TODO: 在此添加控件通知处理程序代码PIP_ADAPTER_INFO pAdapterInfo;PIP_ADAPTER_INFO pAdapter = NULL;DWORD dwRetVal = 0;pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );unsigned long ulOutBufLen = sizeof(IP_ADAPTER_INFO);/GetAdapt

14、ersInfo 可以获得本地计算机的网络信息,从而获得该计算机的子网掩码。/该函数在头文件 Iphlpapi.h.(需安装 Platform SDK)中声明,库文件 Iphlpapi.lib。GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) ; /获得本地计算机的网络信息函数 dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen);pAdapter = pAdapterInfo;while (pAdapter) CString strSubNetMask;strSubNetMask.

15、Format("子网掩码:%sn", pAdapter->IpAddressList.IpMask.String);/MessageBox(strSubNetMask);m_show.InsertString(-1,strSubNetMask);pAdapter = pAdapter->Next;return;E“查询网关”按钮响应的函数源代码void CGetLocalDlg:OnBnClickedGetgetway()/ TODO: 在此添加控件通知处理程序代码PIP_ADAPTER_INFO pAdapterInfo;PIP_ADAPTER_INFO pA

16、dapter = NULL;DWORD dwRetVal = 0;pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );unsigned long ulOutBufLen = sizeof(IP_ADAPTER_INFO);if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) GlobalFree (pAdapterInfo);pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutB

17、ufLen); /获得本地计算机的网络信息函数 if (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) = NO_ERROR)pAdapter = pAdapterInfo;while (pAdapter) CString strGateway;strGateway.Format("网关: %sn", pAdapter->GatewayList.IpAddress.String);m_show.InsertString(-1,strGateway);pAdapter = pAdapter->Next;elseMessageBox("Call to GetAdaptersInfo failed!");return;4.3实训程序测试本机相关信息获取程序如图5:图5获取

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论