《Visual-C++网络编程技术-06.ppt》由会员分享,可在线阅读,更多相关《Visual-C++网络编程技术-06.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、网络编程技术网络编程技术导入导入v内联网经常用在企业的局域网并使用分布式的应内联网经常用在企业的局域网并使用分布式的应用程序,而分布式的应用程序宿主是本地计算机,用程序,而分布式的应用程序宿主是本地计算机,如何正确地获得本地计算机的网络协议及配置信如何正确地获得本地计算机的网络协议及配置信息,对于更深入地编写网络应用程序是一件很重息,对于更深入地编写网络应用程序是一件很重要的事。要的事。 网络编程技术网络编程技术本章要点本章要点v获取主机名和获取主机名和IP地址地址v读取注册表读取注册表v查询本机网卡地址查询本机网卡地址v查询本机子网掩码查询本机子网掩码v查询本机网关查询本机网关v查询本机查询
2、本机DNS设置设置网络编程技术网络编程技术功能需求分析功能需求分析 v开发一个简单的查询工具,可以查询本机的基本开发一个简单的查询工具,可以查询本机的基本软硬件配置,本机的基本网络配置软硬件配置,本机的基本网络配置,包括:包括:v计算机名计算机名vIP地址地址v操作系统操作系统vCPUv网卡地址网卡地址v子网掩码子网掩码vDNS服务器服务器v网关网关网络编程技术网络编程技术界面设计界面设计网络编程技术网络编程技术获取主机名和获取主机名和IP地址地址 v程序运行界面程序运行界面网络编程技术网络编程技术获取本机计算机名源代码获取本机计算机名源代码v WSADATA wsaData;v WSASta
3、rtup(MAKEWORD(2,2),&wsaData); v char HostName128;v BOOL bRet;v bRet = gethostname(HostName, 128);v if( bRet!= 0 )vMessageBox(获取计算机名错误!获取计算机名错误!,提示提示);vreturn;v v CString strMeg = HostName;v strMeg = 本机的计算机名是:本机的计算机名是: + strMeg;v m_show.InsertString(-1,strMeg);v WSACleanup();网络编程技术网络编程技术获取本机获取本机IP地址的
4、源代码地址的源代码 v WSADATA wsaData;v WSAStartup(MAKEWORD(2,2),&wsaData);v char HostName128;v struct hostent* pHost;v gethostname(HostName, 128);v pHost = gethostbyname(HostName); v int i=0;v CString strIP;v while(pHost-h_addr_listi != NULL) v vstrIP = inet_ntoa(*(struct in_addr *)pHost- h_addr_listi); vCSt
5、ring str=本机的本机的IP地址:地址: + strIP;vm_show.InsertString(-1,str);vi+; v v WSACleanup(); 网络编程技术网络编程技术代码详解代码详解gethostname函数函数v该函数可以获取本地主机名,若无错误,返回该函数可以获取本地主机名,若无错误,返回0;否则,返回否则,返回SOCKET_ERROR。vgethostname (char* name, int namelen);v参数参数name:用于指向所获取本地主机名的缓冲:用于指向所获取本地主机名的缓冲区地址。区地址。v参数参数namelen:缓冲区的大小,以字节示。:缓
6、冲区的大小,以字节示。网络编程技术网络编程技术代码详解代码详解gethostbyname函数函数v该函数可以从主机名数据库中得到对应的该函数可以从主机名数据库中得到对应的“主主机机”(由名字和地址标识由名字和地址标识)。若无错误,函数返回。若无错误,函数返回一个指向一个指向hostent结构的指针,它可标识一个结构的指针,它可标识一个“主机主机”列表。列表。vstruct hostent * FAR gethostbyname( const char* name );v参数参数name:是主机名。:是主机名。 网络编程技术网络编程技术读注册表读注册表v获取本机的操作系统信息和获取本机的操作系统
7、信息和CPU信息需要查询注信息需要查询注册表,从注册表中读出所需要的信息,然后显示册表,从注册表中读出所需要的信息,然后显示到界面上到界面上。网络编程技术网络编程技术什么是注册表?什么是注册表?v注册表是注册表是Windows程序员建造的一个复杂的信程序员建造的一个复杂的信息数据库,它是多层次式的。息数据库,它是多层次式的。v注册表由键(或称注册表由键(或称“项项”)、子键(子项)和值)、子键(子项)和值项构成。项构成。v一个键就是分支中的一个文件夹,而子键就是这一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个文件夹中的子文件夹,子键同样是一个键。一个值项
8、则是一个键的当前定义,由名称、数据类个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。型以及分配的值组成。v一个键可以有一个或多个值,每个值的名称各不一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的相同,如果一个值的名称为空,则该值为该键的默认值。默认值。 网络编程技术网络编程技术查看注册表查看注册表v“开始开始”“运行运行”中输入中输入regedit命令,命令,然后回车,会弹出注册表编辑器界面然后回车,会弹出注册表编辑器界面 网络编程技术网络编程技术操作注册表的流程操作注册表的流程 网络编程技术网络编程技术操作注册表操作注册表 使用使用CReg
9、Key类类 CRegKey类提供的几个重要函数:类提供的几个重要函数: vOpen函数函数打开注册表打开注册表vQueryValue函数函数读注册表读注册表vSetValue函数函数写注册表写注册表vClose函数函数关闭注册表关闭注册表网络编程技术网络编程技术代码详解代码详解Open函数函数v打开注册表中的主键。若成功,返回打开注册表中的主键。若成功,返回ERROR_SUCCESS,失败则返回错误值。,失败则返回错误值。vLONG Open( HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired = KEY_ALL_ACCESS );
10、v参数参数hKeyParent:需打开的键的句柄。:需打开的键的句柄。v参数参数lpszKeyName:需打开的键所在的注册表:需打开的键所在的注册表的路径。的路径。 v参数参数samDesired:注册表访问的权限,默认:注册表访问的权限,默认值为值为KEY_ALL_ACCESS。 网络编程技术网络编程技术代码详解代码详解QueryValue函数函数v 读取注册表中键值项的键值,若成功,返回读取注册表中键值项的键值,若成功,返回ERROR_SUCCESS,失败则返回错误值。,失败则返回错误值。v LONG QueryValue( DWORD& dwValue, LPCTSTR lpszVal
11、ueName );v 参数参数dwValue:DWORD数据类型的键值。数据类型的键值。v 参数参数lpszValueName:所读取键值项的名称。:所读取键值项的名称。v LONG QueryValue( LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount );v 参数参数szValue:字符串数据类型的键值。:字符串数据类型的键值。v 参数参数lpszValueName:所读取键值项的名称。:所读取键值项的名称。v 参数参数pdwCount:字符串的长度。:字符串的长度。网络编程技术网络编程技术代码详解代码详解 SetValue函数
12、函数vLONG SetValue( DWORD dwValue, LPCTSTR lpszValueName );v参数参数dwValue:需要写入的:需要写入的DWORD类型键值。类型键值。v参数参数lpszValueName:所写入的键值项名称,:所写入的键值项名称,如果不存在,则增加一个新的键值项。如果不存在,则增加一个新的键值项。vLONG SetValue( LPCTSTR lpszValue, LPCTSTR lpszValueName = NULL );v参数参数lpszValue:需要写入的字符串类型键值。:需要写入的字符串类型键值。v参数参数lpszValueName:所写入
13、的键值项名称,:所写入的键值项名称,如果不存在,则增加一个新的键值项。如果不存在,则增加一个新的键值项。网络编程技术网络编程技术查询本机网卡地址查询本机网卡地址 v程序运行界面程序运行界面网络编程技术网络编程技术获取获取MAC地址流程地址流程 网络编程技术网络编程技术代码详解代码详解头文件和库文件头文件和库文件 vNetBIOS中所用的函数声明、常数等等均是在中所用的函数声明、常数等等均是在头文件头文件nb30.h内定义的,使用内定义的,使用NetBIOS还须还须连接库连接库netapi32.lib v#include v#pragma comment(lib,Netapi32.lib)网络编
14、程技术网络编程技术代码详解代码详解Netbios函数函数 vWin32应用程序可以使用应用程序可以使用Network Basic Input/Output System(NetBIOS)接口)接口与网络中的其他计算机上的应用程序进行通讯与网络中的其他计算机上的应用程序进行通讯vUCHAR Netbios( PNCB pncb ); v参数参数pncb:指向网络控制块的指针。:指向网络控制块的指针。v返回值放在返回值放在pncb指向的结构体里。指向的结构体里。网络编程技术网络编程技术查询本机子网掩码查询本机子网掩码 v子网掩码子网掩码(subnet mask)又叫网络掩码、地址又叫网络掩码、地址
15、掩码、子网络遮罩,它是一种用来指明一个掩码、子网络遮罩,它是一种用来指明一个IP地地址的哪些位标识的是主机所在的子网以及哪些位址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。标识的是主机的位掩码。v子网掩码不能单独存在,它必须结合子网掩码不能单独存在,它必须结合IP地址一起地址一起使用。使用。v子网掩码只有一个作用,就是将某个子网掩码只有一个作用,就是将某个IP地址划分地址划分成网络地址和主机地址两部分。成网络地址和主机地址两部分。 网络编程技术网络编程技术查询子网掩码源代码查询子网掩码源代码v PIP_ADAPTER_INFO pAdapterInfo;v PIP_ADAPT
16、ER_INFO pAdapter = NULL;v DWORD dwRetVal = 0;v pAdapterInfo = (IP_ADAPTER_INFO *)malloc (sizeof (IP_ADAPTER_INFO) );v unsigned long ulOutBufLen = sizeof(IP_ADAPTER_INFO);v GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) ;v /获得本地计算机的网络信息函数获得本地计算机的网络信息函数v dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutB
17、ufLen);v pAdapter = pAdapterInfo;v while (pAdapter) v vCString strSubNetMask;vstrSubNetMask.Format(子网掩码:子网掩码:%sn, pAdapter-IpAddressList.IpMask. String);vMessageBox(strSubNetMask);vpAdapter = pAdapter-Next;v 网络编程技术网络编程技术代码详解代码详解GetAdaptersInfo函数函数 v 函数参数中的函数参数中的PIP_ADAPTER_INFO结构包含了本地结构包含了本地计算机上一个特定
18、网络适配器的信息,从而能够获取所需计算机上一个特定网络适配器的信息,从而能够获取所需的信息,如子网掩码、网卡信息和默认网关等内容的信息,如子网掩码、网卡信息和默认网关等内容v DWORD GetAdaptersInfo( v PIP_ADAPTER_INFO pAdapterInfo, v PULONG pOutBufLenv );v 参数参数pAdapterInfo:指向:指向IP_ADAPTER_INFO结结构的指针构的指针v 参数参数pOutBufLen:一个:一个ULONG变量的指针,表示指变量的指针,表示指向向pAdapterInfo结构的大小。结构的大小。网络编程技术网络编程技术查
19、询本机网关信息查询本机网关信息 v获取网关信息程序与前面获取子网掩码程序实现获取网关信息程序与前面获取子网掩码程序实现方法基本相同,也是通过方法基本相同,也是通过GetAdaptersInfo()函数实现的。函数实现的。 网络编程技术网络编程技术查询本机查询本机DNS设置设置 vDNS 是域名系统是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。计算机和网络服务。v在在Internet上域名与上域名与IP地址之间是一对一(或地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器者多
20、对一)的,域名虽然便于人们记忆,但机器之间只能互相认识之间只能互相认识IP地址地址v域名和域名和IP地址之间的转换工作称为域名解析,域地址之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。就是进行域名解析的服务器。网络编程技术网络编程技术代码解析代码解析GetNetworkParams()函数函数v 功能是获取本地计算机的网络参数功能是获取本地计算机的网络参数, 从而获得计算机的从而获得计算机的DNS设置。成功返回设置。成功返回TRUE,失败返回,失败返回FALSE。该函数。该函数在头文件在头文件Iph
21、lpapi.h中定义,需要库文件中定义,需要库文件Iphlpapi.lib的支持。的支持。v DWORD GetNetworkParams(PFED_INFO pFixedInfo, PULONG pOutBufLen);v 参数参数pFixedInfo:指向:指向FIXED_INFO结构的指针,该结构的指针,该结构获取本地计算机的网络参数。结构获取本地计算机的网络参数。v 参数参数pOutBufLen:指向一个:指向一个ULONG变量的指针,该变量的指针,该ULONG变量表示指向变量表示指向pFixedInfo结构的大小。结构的大小。 网络编程技术网络编程技术课堂练习题课堂练习题v 操作注册表用的类是操作注册表用的类是 。v 注册表由注册表由 、子键(子项)和、子键(子项)和 构成。构成。v 的作用就是将某个的作用就是将某个IP地址划分成网络地地址划分成网络地址和主机地址两部分。址和主机地址两部分。v 域名便于人们记忆,但机器之间只能互相认识域名便于人们记忆,但机器之间只能互相认识IP地址,因此需要将域名与地址,因此需要将域名与IP地址进行转换,地址进行转换,称为称为 。
限制150内