Visual_C#_2008之制作IP设置程序.doc_第1页
Visual_C#_2008之制作IP设置程序.doc_第2页
Visual_C#_2008之制作IP设置程序.doc_第3页
Visual_C#_2008之制作IP设置程序.doc_第4页
Visual_C#_2008之制作IP设置程序.doc_第5页
已阅读5页,还剩21页未读, 继续免费阅读

下载本文档

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

文档简介

第18章 IP设置程序随着计算机网络技术的飞速发展,越来越多的企事业单位员工会面临需要频繁更换计算机IP地址的情况。例如一所笔记本大学,学生在不同的教室、图书馆或者宿舍,如果需要访问网络,就必须不断的更改笔记本电脑的IP地址。然而使用Windows自带的IP设置程序的操作比较复杂,本章介绍的IP设置程序旨在解决这一类的问题。说明:“笔记本大学”是一个新的概念,是指那些所有学生都有一台用于学习的笔记本电脑的大学。 本章将详细介绍如何使用Visual C# 2008设计一个这样的IP设置程序。从中不仅可以进一步掌握ListBox(列表框)、ComboBox(组合框)等控件的使用,同时还能学会使用MaskedTextBox控件来限制用户对IP地址的输入格式,从而能防止输入无效的IP地址等。并且通过学习本章的知识,能够掌握一些关于IP地址、WMI(Windows Management Instrumentation,Windows管理规范)等方面的知识,还能进一步的掌握一些字符串的操作方法以及文本文件的访问方法。18.1 IP设置程序简介随着教育事业与计算机信息技术的高速发展,目前已涌现出越来越多的笔记本大学,即每一位学生都配有一个笔记本电脑,这样,不管是在课堂上还是课后,都可以充分的利用网络资源,达到更好的学习效果。然而,在使用网络资源的时候不得不面临这样一个问题,即因为学习地点不确定,学生往往需要在教室、图书馆或者宿舍等地使用计算机访问网络,这就不得不频繁的更换本机的IP地址。然而使用操作系统(如:Windows XP)自带的IP地址修改工具在操作方便性等方面上往往不尽如人意,因此,设计一个使用简单、操作方便、又能快速的更改IP的工具是十分必要的。一般来说,笔记本大学的每个教室的座位数都在两百以内,因此使用的IP地址为C类IP地址,或使用其他类别的IP地址,但需要使用子网掩码来划分子网,然而不管哪种情况,一般都是IP地址(二进制)的前24位表示网络地址(网络号),后8位表示主机地址(主机号)。本章介绍的IP设置程序旨在解决符合这些情况的问题,当然,它不仅仅能方便的应用到笔记本大学,同时,也能应用在那些类似的需要频繁更换IP地址的企事业单位或者个人。18.2 准备知识本章介绍的IP设置程序的设计,需要掌握一些基础知识,如IP地址的概念及分类、Split()函数、MastedTextBox控件、WMI(Windows Management Instrumentation的简写,即Windows管理规范)。本节将分别对这些知识进行介绍。18.2.1 IP地址及子网和掩码IP地址即Internet地址,通常也叫互联网地址。IP地址是用来唯一标识互联网上计算机的逻辑地址。每台连网的计算机都用IP地址来标识自己,并依靠IP地址与互联网上的其他站点互相区分、相互联系。因此,IP地址必须唯一。为了保证IP地址的唯一性,IP地址由统一的组织负责分配。IP地址在整个IP协议规范中处于很重要的地位。1. IP地址的表示IP地址的长度为32位(4个字节),采用点分十进制数表示方法,即每个地址被表示为4个以小数点隔开的十进制整数,每个整数对应1个字节,如23。32位的IP地址由网络号和主机号两部分构成。其中,网络号就是网络地址,用于标识某个网络。主机号则用于标识在该网络上的一台特定的主机。位于相同物理网络上的所有主机具有相同的网络号,如图18-1所示。图18-1 IP地址的表示2. IP地址的分类为了适应于不同规模的物理网络,一般将IP地址分为A、B、C、D、E五类,但在Internet上可分配使用的IP地址实际上只有A、B、C三类。这三类地址统称为单目传送(unicast)地址,因为这些地址通常只能分配给唯一的一台主机。D类地址被称为组播(multicast)地址,组播地址可用于视频广播或视频点播系统,而E类地址尚未使用,保留给将来的特殊用途。不同类别的IP地址的网络号和主机号的长度划分不同,它们所能识别购物理网络的数量不同,每个物理网络所能容纳的主机个数也不同。如图18-2所示。图18-2 IP地址格式与分类A类地址的第一个字节的最高位为“0”,网络号占1个字节(8位),主机号占3个字节(24位)。A类地址可识别128个不同的物理网络或虚拟网,每个A类子网可容纳1600万台主机。B类地址的第一个字节的前2位是“10”,网络号占2个字节(16位),主机号占2个字节(16位)。B类地址可识别16384个不同的物理网络或虚拟网,每个B类子网可容纳65536台主机。C类地址的第一个字节的前3位为“110”,网络号占3个字节(24位),主机号占1个字节(8位)。C类地址可识别200万个不同的物理网络或虚拟网,每个C类子网内最多有256台主机。D类地址的前4位为“1110”,E类地址的前5位为“11110”。根据A、B、C、D、E的高位数值,可以总结出它们的第一个字节的取值范围,如A类地址的第一个字节的数值在1126之间。表18-1给出了每种地址类别第一个字节的取值范围。表18-1 各类IP地址的取值范围地址类别高位第一个字节的十进制数A01126B10128191C110192223D1110224239E11110240254从表18-1可以看到,原本属于A类地址范围的IP地址55却没有包含在A类地址之中。这是因为,任何一个以数字127开头的IP地址(127.X.X.X)都叫做回送地址(loopback address),它是一个保留地址,最常见的一种为。 每台主机上对应于IP地址有个接口,称为回送接口(loopback interface)。IP协议规定,当任何程序向回送地址发送数据包时,计算机上的协议软件不会把该数据包向网络上发送,而是把数据直接发送给本主机。因此,网络号等于127的数据包不能出现在任何网络上,主机和路由器不能为该地址广播任何寻径信息。3. 子网在广播式的网络技术中,广播信息会在同一个广播域(同一个物理网络或同一个逻辑网络)中传播。因此,在一个广播域中,如果网络站点过多,大量的广播信息在网上传送,会导致网络的性能急剧下降。为此,在实际的网络设计中,要求属于同一个广播域的网络规模不能太大,主机数不能过多。而A类和B类地址的每个网络都包容了大量的主机地址。一个包容1600万台(A类)或6万多台(B类)主机的单一物理网络几乎是不可能实现的。另外,它们的主机号部分也是很浪费的。在Internet迅速发展的今天,IP地址已经成为极为珍贵的资源。为了解决以上两个问题,提出了子网(subnet)和掩码(mask)的概念。通过将IP地址的主机号部分进一步划分为子网号和主机号的方法,把一个包含大量主机的网络划分成许多小的网络,每个小的网络就是一个子网。每个子网都是一个独立的逻辑网络、独立的广播域。它可以隔离广播信息,缩小广播域,以提高网络性能。划分子网后使网络便于管理和隔离故障,提高网络的可靠性,而且还可以更有效地利用IP地址空间。4. 掩码掩码用来确定如何划分IP地址的网络号、子网号和主机号,它可将主机地址部分进一步划分为子网地址和主机地址。掩码是一个与IP地址相对应的32位数字。它和IP地址一样也用4个点分十进制数表示,如。掩码的一些位为1,另一些位为0。二进制位为“1”所对应的IP地址位是网络号和子网号。掩码的二进制位为“0”所对应的IP地址位是主机号。这样通过掩码将IP地址中的主机地址段再分为子网号和主机号,使网络号的位数加长,其结果是不但把大网划分成了若干个小网,而且还增加了网络的个数。这时的网络地址应为网络号加子网号,它们共同标识一个网络。如IP地址23,原本是一个B类地址,它的前两个字节是网络号,标准掩码,网络地址是。如果掩码设置为,则第3个字节变为子网号,第4个字节仍为主机号,其网络地址为。原则上掩码的0和1可以任意分布,不过一般在设计时,把掩码开始连续的几位设为1。可以认为掩码是对地址分类的扩展,它加大了地址分配的灵活性。A、B、C类地址各自的标准掩码,分别为、和。这三类地址都可以用掩码将其主机号部分再进行划分,即使是C类也不例外。如一个C类网络地址,可以利用掩码24,把该网络分为8个子网,每个子网的网络地址是:,2,4,6,28,60,92,24,且每个子网内最多可有30台主机(网络地址和广播地址各占用一个IP)。IP地址的网络号和子网号加上主机号部分的所有位为“0”的地址被定义为网络地址,如。网络地址是非常重要的,数据包寻径就基于目的网络地址。用IP地址和掩码进行二进制与运算则得到网络地址。IP地址的网络地址部分为“0”,加上主机号被定义为主机地址,如23。18.2.2 Split()函数Split()函数是一个字符串操作函数,它用于以某个字符为界将一个字符串分成多个子字符串,以字符串数组的形式返回。例如:/*string str = 23;string strPart = str.Split(.);/*上述代码执行后,字符串数组strPart 中有四个元素,分别为188、23、18和123,即将字符串23以字符.为界分开的四个子字符串。18.2.3 MaskedTextBox控件相对于.NET Framework 1.1,.NET Framework 2.0、.NET Framework 3.5等版本中新增一个名为MaskedTextBox的类,它位于命名空间“System.Windows.Forms”中,其作用是使用掩码区分正确和不正确的用户输入,常用于输入IP地址。在设计Windows应用程序时,可以直接使用工具箱中的MaskedTextBox控件。添加MaskedTextBox控件后,其外观如图18-3所示。图18-3 MaskedTextBox从外观上看,似乎与TextBox一样,但MaskedTextBox控件具有一些特殊的属性,用于控制用户的输入,下面介绍一下本章的IP设置程序需要用到的几个属性。1. Mask属性Mask属性用于设置控制MaskedTextBox控件允许输入的字符串。例如将Mask属性设为“#.#.#.#”,表示该MaskedTextBox中只能输入4组(每组3个)数字,共12个数字,中间用字符.隔开。设置后的MaskedTextBox控件外观如图18-4所示。图18-4 设置Mask属性2. PromptChar属性PromptChar属性用于指示用作占位符的字符。其默认值为下划线字符_。例如设置MaskedTextBox控件的Mask属为“#.#.#.#”后,其外观如图18-4所示,若希望不使用下划线而使用空格指示字符占位符,则将PromptChar属性设为空格字符( )即可,设置后的MaskedTextBox控件外观如图18-5所示。图18-5 设置PromptChar属性18.2.4 WMIWMI(Windows管理规范)是英文Windows Management Instrumentation的简写,WMI的功能主要是:访问本地主机的一些信息和服务,当然也可以管理远程计算机(在拥有足够的权限的前提下),比如:重启,关机,关闭进程,创建进程等。具体说来,WMI具有以下作用:(1)获取本地和远程计算机的硬件软件信息(例如获取本地计算机的磁盘信息、获取本地计算机的网络设置等)。(2)监视本地和远程计算机的软件和服务等运行状况。(3)控制本地和远程计算机的软件和服务运行。(4)其他高级应用。WMI 最初于1998年作为一个附加组件与Windows NT 4.0 Service Pack 4 一起发行,是内置在Windows 2000、Windows XP和Windows Server 2003系列操作系统中核心的管理支持技术。基于由Distributed Management Task Force(DMTF)所监督的业界标准,WMI是一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源。大多用户习惯于使用众多的图形化管理工具来管理Windows资源,在WMI之前这些工具都是通过Win32应用程序编程接口(Application Programming Interfaces,API)来访问和管理Windows资源的。熟悉系统编程都知道AP是非常重要的。但是大多数脚本语言都不能直接调用Win32 API,WMI的出现使得系统管理员可以通过一种简便的方法即利用常见的脚本语言实现常用的系统管理任务。Win32_NetworkAdapterConfiguration类是WMI的一个常用类,用于完成对计算机网络适配器的配置。WMI提供了Win32_NetworkAdapterConfiguration类的这些属性和方法,可用来自动完成客户端的网络配置。其中本章介绍的IP设置程序需要用到的一些属性和方法如下:(1)IPEnabled属性IPEnabled属性是一个布尔(bool)类型的值,用于表示TCP/IP在该网络适配器上是否可用。(2)IPAddress属性IPAddress属性表示与当前网络适配器相关联的IP地址数组。(3)DefaultIPGateway属性DefaultIPGateway属性表示缺省网关的IP地址数组。(4)DNSServerSearchOrder属性DNSServerSearchOrder属性表示DNS服务器地址数组。(5)EnableStatic()方法EnableStatic()方法有两个参数,其原型为:uint32 EnableStatic(string IPAddress, string SubnetMask),表示启用静态的TCP/IP设置。(6)SetGateWays()方法SetGateWays()方法有两个参数,其原型为:uint32 SetGateWays(string DefaultIPGateway, uint16 GateWayCostMetric),用于指定一系列的网关。(7)SetDNSServerSearchOrder()方法SetDNSServerSearchOrder()方法有一个参数,其原型为:uint32 SetDNSServerSearchOrder (string DNSServerSearchOrder),表示以数组的形式传入DNS服务器地址列表。另外,本章介绍的IP设置程序还用到了ManagementClass类的GetMethodParameters()方法和InvokeMethod()方法。其中GetMethodParameters()方法有一个名为methodName的字符串参数,它用于获取methodName方法的参数列表;InvokeMethod()方法是对WMI对象调用的方法。18.3 IP设置程序的用户界面对于本章介绍的IP设置程序来说,简单易用、操作方便是至关重要的,因为设计该IP设置程序的目的就是为了解决操作系统中自带的IP修改工具操作麻烦的问题。因此,设计一个好的用户界面是非常关键的,本节将介绍IP设置程序用户界面的设计以及窗体和窗体上各对象的属性设置。18.3.1 界面设计本小节介绍IP设置程序的用户界面设计、用户界面各对象的说明,以及IP设置程序的使用和操作方法。1. 用户界面设计打开Visual C# 2008开发工具,新建一个名为“IPSet”的Windows应用程序,然后使用PictureBox、Label、ComboBox、GroupBox、TextBox、MakedTextBox、Button以及ListBox控件将用户界面设计成如图18-6所示(按照表18-2给出的信息设置好窗体及窗体上各控件的属性后的界面)。图18-6 IP设置程序用户界面2. 界面说明及操作方法用户界面中左上角的网卡列表列出了本计算机的所有可用网络适配器,选择不同的网络适配器则对不同的网络适配器对应的网络配置进行操作。用户界面中右上角的标签控件中显示当前使用的IP地址。用户界面中右边的【教室号及其对应的网络号】用于添加教室名称及其对应的网络地址信息(这些信息均保存在程序可执行文件路径下的一个名为“IPList.ini”的文件中),所有的信息都显示在列表框中。界面左下方【修改网络设置】是用户设置本机网络配置的地方,其操作方法为:首先在【教室号】组合框中选择当前所在的教室编号(或者在右边的列表框中选中该教室及网络地址列表项),这时会在【主机号】文本框中自动生成一个主机号(即C类二进制IP地址的后8位),若不希望更改成自动生成的主机号,可直接在【主机号】文本框中修改,接下来再修改好子网掩码和网关以及DNS服务器地址,最后单击【修改】按钮来设置本机的网络配置,在发生【主机号】输入错误或者IP冲突等异常等情况时,系统报错。18.3.2 属性设置为窗体添加好控件后,应设置各对象的属性。表18-2给出了IP设置程序用户界面中的窗体和窗体上各控件的属性设置情况。表18-2 窗体和各控件的属性设置控件类型控件名称属性设置结果FormForm1NamefrmIPSetTextIP设置StartPositionCenterScreenMaximizeBoxFalseAutoSizeModeGrowAndShrinkBackColorWindowIcon选择IPSet图标(可以在本书的源代码文件中找到)PictureBoxPictureBox1Image选择网卡图片(可以在本书的源代码文件中找到)GroupBoxGroupBox1Text修改网络设置GroupBox2TextIP 地址GroupBox3Text子网掩码和网关GroupBox4TextDNS 服务器地址GroupBox5Text教室号及其对应的网络号ComboBoxComboBox1NamecmbConnDropDownStyleDropDownListComboBox2NamecmbClassroomNumLabelLabel1Text当前IP地址:Label2NamelblIPText“”(清空)AutoSizeFalseLabel3Text教 室 号Label4Text主 机 号Label5Text子网掩码Label6Text网 关Label7Text首先地址Label8Text备用地址Label9Text教室Label10Text网络地址Label11Text教室号Label12Text(如:A101)Label13Text网络号Label14Text(尾数为0)Label15Text(如:)TextBoxTextBox1NametxtHostNumMaxLength3TextBox2NametxtClassroomNumMaxLength4MaskedTextBoxMaskedTextBox1NamemtxtSubNetworkMask#.#.#.#PromptChar (一个空格字符)MaskedTextBox2NamemtxtGatewayMask#.#.#.#PromptChar (一个空格字符)MaskedTextBox3NamemtxtDNS1Mask#.#.#.#PromptChar (一个空格字符)MaskedTextBox4NamemtxtDNS2Mask#.#.#.#PromptChar (一个空格字符)MaskedTextBox5NamemtxtNetworkNumMask#.#.#.#PromptChar (一个空格字符)ButtonButton1NamebtnSetText修改Button2NamebtnCloseText退出Button3NamebtnInsertText添加教室号及其对应的网络号ListBoxListBox1NamelstNum18.4 编写程序代码用户界面设计完毕后,接下来的工作便是编写程序代码,因为IP设置程序程序需要使用到WMI,因此首先添加对WMI的引用,打开【解决方案资源管理器】,在【引用】项上单击右键,并选择【添加引用】菜单项,如图18-7所示。图18-7 添加引用选择【添加引用】菜单项后,将会弹出如图18-8所示的【添加引用】对话框窗口,选择【.NET】选项卡中的System.Management组件,然后单击【确定】按钮即可。图18-8 【添加引用】对话框接下来打开项目的代码编辑器编写程序代码,首先为项目添加两个分别用于设置网络配置和读写文本文件的命名空间,代码如下:/*using System.Management; / 访问网络设置using System.IO; / 读写文本文件/*程序中需要用到几个公共变量,因此需要在代码的通用段(frmIPSet类)中,定义这些公共变量,代码如下:/*/ 文件 IPList.ini 的路径string path = Application.StartupPath + + IPList.ini ;/ n用来存放当前 IPList.ini中的记录数int n = 0;/ 最多可以保存1000个条记录string IP = new string1000;string classroomNum = new string1000;string netNum = new string1000;/ selectClassroomNum用来存放被选中教室号string selectClassroomNum;/ selectNetNum用来存放被选中教室对应的网络号string selectNetNum;/ 字符串 from 用来判断 IP 为空时属于哪种情况string from = ;/*定义一个名为ShowIP()的方法,该方法用于读取IP 地址、子网掩码、网关等网络配置,并将其显示在相应的文本框中,代码如下:/*/ 读取 IP 地址、子网掩码、网关等网络配置的方法/*void ShowIP() GetIPList(); / 使用WMI获取本地计算机的网络设置 ManagementClass mc = new ManagementClass (Win32_NetworkAdapterConfiguration); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) if (bool)moIPEnabled) if (moDescription.ToString() = cboCard.SelectedItem.ToString().Trim() / 取得本机 IP 地址,并显示在组合框中 string ipAddress = (string)moIPAddress; lblIP.Text = ipAddress0; if (ipAddress0 != ) / 取得本机子网掩码,并显示在相应的文本框中 string subnets = (string)moIPSubnet; string subStr = ; / 使用 Split 函数将子网掩码以“.”为界分成4个部分 string subPart = subnets0.Split(.); for (int i = 0; i = 3; i+) / 若不足3位,则在其左边补空格,并连接成一个字符串 subStr += subParti.PadLeft(3); mtxtSubNetwork.Text = subStr; / 取得网关,并显示在相应的文本框中 string gateways = (string)moDefaultIPGateway; string gatStr = ; string gatPart = gateways0.Split(.); for (int i = 0; i = 3; i+) gatStr += gatParti.PadLeft(3); mtxtGateway.Text = gatStr; / 取得 DNS 服务器地址,并显示在相应的文本框中 string dnsList = (string)moDNSServerSearchOrder; string dnsStr1 = ; string dnsPart1 = dnsList0.Split(.); for (int i = 0; i 1) string dnsStr2 = ; string dnsPart2 = dnsList1.Split(.); for (int i = 0; i = 3; i+) dnsStr2 += dnsPart2i.PadLeft(3); mtxtDNS2.Text = dnsStr2; else if (from = btnSet_Click) MessageBox.Show(IP冲突,请重新输入主机号, 提示); txtHostNum.Text = ; txtHostNum.Focus(); else if (from = cboCard_SelectedIndexChanged) MessageBox.Show(尚未设置IP,请设置, 提示); /*/*定义一个名为SetIP()的方法,该方法用于根据选择的教室号、填入的主机号等信息设置IP 地址、子网掩码、网关等网络配置,代码如下:/*/ 设置 IP 子网掩码、网关等网络配置的方法/*void SetIP() ManagementClass mc = new ManagementClass (Win32_NetworkAdapterConfiguration); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) if (bool)moIPEnabled) if (moDescription.ToString() = cboCard.SelectedItem.ToString().Trim() ManagementBaseObject newIP = mo.GetMethodParameters(EnableStatic); ManagementBaseObject newGateway = mo.GetMethodParameters(SetGateways); ManagementBaseObject newDNS = mo.GetMethodParameters(SetDNSServerSearchOrder); / 将要修改的目标 IP 地址 string selectNewIP; string IPStr = ; string IPPart = selectNetNum.Substring (0, selectNetNum.Length - 2).Split(.); for (int i = 0; i = 2; i+) IPStr += (IPParti.Trim() + .); selectNewIP = IPStr + txtHostNum.Text; newIPIPAddress = new string selectNewIP ; / 将要修改的目标子网掩码 string subStr = ; string subPart = mtxtSubNetwork.Text.Split(.); for (int i = 0; i = 3; i+) subStr += (subParti.Trim() + .); subStr = subStr.Substring(0, subStr.Length - 1); newIPSubnetMask = new string subStr ; / 将要修改的目标网关 string gatStr = ; string gatPart = mtxtGateway.Text.Split(.); for (int i = 0; i = 3; i+) gatStr += (gatParti.Trim() + .); gatStr = gatStr.Substring(0, gatStr.Length - 1); newGatewayDefaultIPGateway = new string gatStr ; / 将要修改的目标 DNS 首选地址 string dnsStr1 = ; string dnsPart1 = mtxtDNS1.Text.Split(.); for (int i = 0; i = 3; i+) dnsStr1 += (dnsPart1i.Trim() + .); dnsStr1 = dnsStr1.Substring(0, dnsStr1.Length - 1); / 将要修改的目标 DNS 备用地址 string dnsStr2 = ; string dnsPart2 = mtxtDNS2.Text.Split(.); for (int i = 0; i = 3; i+) dnsStr2 += (dnsPart2i.Trim() + .); dnsStr2 = dnsStr2.Substring(0, dnsStr2.Length - 1); newDNSDNSServerSearchOrder = new string dnsStr1, dnsStr2 ; / 修改网络设置 ManagementBaseObject setIP = mo.InvokeMethod (EnableStatic, newIP, null); ManagementBaseObject setGateways = mo.

温馨提示

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

最新文档

评论

0/150

提交评论