欢迎来到天天文库
浏览记录
ID:40239755
大小:1.05 MB
页数:85页
时间:2019-07-28
《Windows网络编程 罗莉琴 詹祖桥 第10章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Windows网络编程实用教程授课教师:职务:第10章设计局域网探测器课程描述局域网探测器可以帮助网络管理员探测子网中包含的网络设备和计算机,并获取计算机的基本信息,检测IP地址的在线状态。这些都可以帮助网络管理员更方便地对网络进行管理和日常维护。本章将介绍设计和实现局域网探测器的方法。本章知识点10.1局域网探测器的主要功能10.2基础模块设计10.3系统主界面设计10.4加载和退出主界面10.5管理子网10.6扫描指定的子网10.7检测子网的状态10.1局域网探测器的主要功能顾名思义,局域网探测器的主要功能是探测局域网中
2、有哪些在线设备,并获取网络中计算机的基本信息,包括IP地址、MAC地址、主机名和所属工作组的。本实例中介绍的局域网探测器主要包含如下功能模块。1.获取本地网络信息2.子网管理3.子网扫描4.获取子网中计算机的基本信息5.检测设备的在线状态10.2基础模块设计为了实现探测在线设备和获取设备基本信息的功能,需要设计一些基础模块,包括一些基础函数、本地主机类CLocalhost、设备信息类CDevice和子网信息类CSubnet。本节将介绍这些基础模块的实现方法。10.2.1基础函数在实例的BaseFunc.h中,定义了4个基础函
3、数,在项目的其他代码中将调用这些基础函数。本节将介绍这些基础函数的功能和实现方法。1.IsNumber()函数2.IsValidIP()函数3.ParseSubnetString()函数4.GetSubnetFile()函数1.IsNumber()函数IsNumber()函数用于判断一个字符串是否是整数格式,代码如下:boolIsNumber(stringstr){if(str.length()==0)returnfalse;for(inti=0;i4、5、str[6、i]>'9'){returnfalse;}}returntrue;}如果参数str的长度等于0,则返回false;否则遍历字符串str中的每个字符,如果存在不在0~9之间的字符,则返回false。如果str中包含的所有字符都在0~9之间,则函数返回true。2.IsValidIP()函数程序依次定位字符串ip中的小数点字符,如果找到,则截取其前面的子串,然后对该子串做如下判断:(1)调用IsNumber()函数判断该子串是否为整数格式。(2)判断该整数是否在0~255之间。如果以上两项有一条不满足,则返回false。如果找不7、到4个小数点,函数也会返回false。在上面条件都满足的情况下,IsValidIP()函数返回true。3.ParseSubnetString()函数ParseSubnetString()函数用于对子网字符串进行解析,得到对应的子网对象。本实例中使用下面的格式来表现子网:<网络地址>/<子网掩码>如果是本地子网(即本地计算机所在的子网),则字符串在后面加上标识,例如:192.168.5.200/255.255.255.0(本地)ParseSubnetString()函数的功能是解析上面的字符串,得到CSubnet对象。CSu8、bnet是用户自定义的子网类,具体情况将在10.2.4小节介绍。4.GetSubnetFile()函数stringGetSubnetFile(){//以下代码用于保存当前所有子网charfullPath[100];//获取可执行文件的绝对路径GetModuleFileName(AfxGetInstanceHandle(),fullPath,100);char*str=strstr(fullPath,"LanScanner.exe");*str=' ';strcat(fullPath,"\subnetlist");//生成9、保存子网列表的文件名returnfullPath;}GetModuleFileName()函数DWORDGetModuleFileName(HMODULEhModule,LPTSTRlpFilename,DWORDnSize);参数说明如下:hModule,指定要获取路径的模块句柄。如果该参数为NULL,则获取当前进程的可执行文件的绝对路径。这里调用AfxGetInstanceHandle()函数获取当前应用程序的实例句柄,作为hModule的值。lpFilename,获取到的模块文件的绝对路径。nSize,指定lpFile10、name缓冲区的大小。10.2.2本地主机类CLocalhost类CLocalhost的主要功能是获取本地计算机的网络适配器信息。结构体AdapterInfo用于定义网络适配器的基本信息,代码如下:structAdapterInfo{stringName;//网络适配器名称stringDe
4、
5、str[
6、i]>'9'){returnfalse;}}returntrue;}如果参数str的长度等于0,则返回false;否则遍历字符串str中的每个字符,如果存在不在0~9之间的字符,则返回false。如果str中包含的所有字符都在0~9之间,则函数返回true。2.IsValidIP()函数程序依次定位字符串ip中的小数点字符,如果找到,则截取其前面的子串,然后对该子串做如下判断:(1)调用IsNumber()函数判断该子串是否为整数格式。(2)判断该整数是否在0~255之间。如果以上两项有一条不满足,则返回false。如果找不
7、到4个小数点,函数也会返回false。在上面条件都满足的情况下,IsValidIP()函数返回true。3.ParseSubnetString()函数ParseSubnetString()函数用于对子网字符串进行解析,得到对应的子网对象。本实例中使用下面的格式来表现子网:<网络地址>/<子网掩码>如果是本地子网(即本地计算机所在的子网),则字符串在后面加上标识,例如:192.168.5.200/255.255.255.0(本地)ParseSubnetString()函数的功能是解析上面的字符串,得到CSubnet对象。CSu
8、bnet是用户自定义的子网类,具体情况将在10.2.4小节介绍。4.GetSubnetFile()函数stringGetSubnetFile(){//以下代码用于保存当前所有子网charfullPath[100];//获取可执行文件的绝对路径GetModuleFileName(AfxGetInstanceHandle(),fullPath,100);char*str=strstr(fullPath,"LanScanner.exe");*str=' ';strcat(fullPath,"\subnetlist");//生成
9、保存子网列表的文件名returnfullPath;}GetModuleFileName()函数DWORDGetModuleFileName(HMODULEhModule,LPTSTRlpFilename,DWORDnSize);参数说明如下:hModule,指定要获取路径的模块句柄。如果该参数为NULL,则获取当前进程的可执行文件的绝对路径。这里调用AfxGetInstanceHandle()函数获取当前应用程序的实例句柄,作为hModule的值。lpFilename,获取到的模块文件的绝对路径。nSize,指定lpFile
10、name缓冲区的大小。10.2.2本地主机类CLocalhost类CLocalhost的主要功能是获取本地计算机的网络适配器信息。结构体AdapterInfo用于定义网络适配器的基本信息,代码如下:structAdapterInfo{stringName;//网络适配器名称stringDe
此文档下载收益归作者所有