C语言.NET技术07.doc_第1页
C语言.NET技术07.doc_第2页
C语言.NET技术07.doc_第3页
C语言.NET技术07.doc_第4页
C语言.NET技术07.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第7章 IP修改器7.1 IP修改器简介7.2 准备知识本章介绍的IP修改器的设计,需要掌握一些基础知识,如IP地址的概念及分类、Split()函数、MastedTextBox控件、WMI(Windows Management Instrumentation的简写,即Windows管理规范)和文本文件的读写。本节将分别对这些知识进行介绍。7.2.1 IP地址及子网和掩码IP地址即Internet地址,通常也叫互联网地址。IP地址是用来唯一标识互联网上计算机的逻辑地址。每台连网的计算机都用IP地址来标识自己,并依靠IP地址与互联网上的其他站点互相区分、相互联系。因此,IP地址必须唯一。为了保证IP地址的唯一性,IP地址由统一的组织负责分配。IP地址在整个IP协议规范中处于很重要的地位。1. IP地址的表示IP地址的长度为32位(4个字节),采用点分十进制数表示方法,即每个地址被表示为4个以小数点隔开的十进制整数,每个整数对应1个字节,如23。32位的IP地址由网络号和主机号两部分构成。其中,网络号就是网络地址,用于标识某个网络。主机号则用于标识在该网络上的一台特定的主机。位于相同物理网络上的所有主机具有相同的网络号,如图7-1所示。图7-1 IP地址的表示2. IP地址的分类为了适应于不同规模的物理网络,一般将IP地址分为A、B、C、D、E五类,但在Internet上可分配使用的IP地址实际上只有A、B、C三类。这三类地址统称为单目传送(unicast)地址,因为这些地址通常只能分配给唯一的一台主机。D类地址被称为组播(multicast)地址,组播地址可用于视频广播或视频点播系统,而E类地址尚未使用,保留给将来的特殊用途。不同类别的IP地址的网络号和主机号的长度划分不同,它们所能识别购物理网络的数量不同,每个物理网络所能容纳的主机个数也不同。如图7-2所示。图7-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之间。表7-1给出了每种地址类别第一个字节的取值范围。表7-1 各类IP地址的取值范围地址类别高位第一个字节的十进制数A01126B10128191C110192223D1110224239E11110240254从表7-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。7.2.2 Split()函数Split()函数是一个字符串操作函数,它用于以某个字符为界将一个字符串分成多个子字符串,以字符串数组的形式返回。例如:/*string str = 23;string strPart = str.Split(.);/*上述代码执行后,字符串数组strPart 中有四个元素,分别为188、23、18和123,即将字符串23以字符.为界分开的四个子字符串。7.2.3 MaskedTextBox控件相对于.NET Framework 1.1,.NET Framework 2.0新增一个名为MaskedTextBox的类,它位于命名空间“System.Windows.Forms”中,其作用是使用掩码区分正确和不正确的用户输入,常用于输入IP地址。在Windows应用程序中,可以直接使用工具箱中的MaskedTextBox控件。添加MaskedTextBox控件后,其外观如图7-3所示。图7-3 MaskedTextBox从外观上看,似乎与TextBox一样,但MaskedTextBox控件具有一些特殊的属性,用于控制用户的输入,下面介绍一下本章的IP修改器需要用到的几个属性。1. Mask属性Mask属性用于设置控制MaskedTextBox控件允许输入的字符串。例如将Mask属性设为“#.#.#.#”,表示该MaskedTextBox中只能输入4组(每组3个)数字,共12个,中间用字符.隔开。设置后的MaskedTextBox控件外观如图7-4所示。图7-4 设置Mask属性2. PromptChar属性PromptChar属性用于指示用作占位符的字符。其默认值为下划线字符_。例如设置MaskedTextBox控件的Mask属为“#.#.#.#”后,其外观如图7-2所示,若希望不使用下划线而使用空格指示字符占位符,则将PromptChar属性设为空格字符( )即可,设置后的MaskedTextBox控件外观如图7-5所示。图7-5 设置PromptChar属性7.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对象调用的方法。7.2.5 读写文本文件在Visual C# 2005中,有很多与文件操作有关的类,它们位于System.IO命名空间中,可以使用其中的StreamReader类和StreamWriter类来读写文本文件,它们是专门针对文本文件设计的。1. 读取文本文件System.IO命名空间中的StreamReader类专门用于读取文本文件,它的构造函数有多个重载,其中最常用的一种形式如下:public StreamReader(string path, Encoding encoding)说明: 参数path为要读取的文本文件的路径; 参数encoding指定了要使用的字符编码形式,最简单的StreamReader类的构造函数没有encoding参数,即使用默认的字符编码形式。获取StreamReader类实例的方法有两种:(1)直接使用StreamReader类,例如:/*StreamReader sr = new StreamReader (D:Welcome.txt, Encoding.GetEncoding(GB2312);/*说明:GB2312(即GB2312-80)是一个简体中文字符集的中国国家标准,全称为信息交换用汉字编码字符集基本集,由中国国家标准总局发布,1981年5月1日开始实施。GB2312编码通行于大陆、新加坡等地。几乎所有的中文系统和国际化的软件都支持GB2312。(2)也可以使用FileInfo类来获取StreamReader类的实例,按照这种方法获取StreamReader类实例,其编码方式为UTF-8。例如:/*FileInfo fInfo = new FileInfo(D:Welcome.txt);StreamReader sr = fInfo.OpenText();/*StreamReader类最常用的用于读取文本文件的方法是ReadLine方法,即每次读取一行文本内容。【例7-1】在“D:”新建一个文本(.txt)文档,命名为“Visual Studio 2005.txt”,并输入文字如图7-6所示。然后创建应用程序,使用StreamReader类将其读出并显示在高级文本框(RichTextBox)中。图7-6 Visual Studio 2005.txt文件说明:高级文本框(RichTextBox)是一个文本编辑控件,其功能强于TextBox控件,它可以处理特殊格式的文本。顾名思义,RichTextBox控件使用Rich Text Format(RTF)处理特殊的格式。(1)首先设计程序界面如图7-7所示。图7-7 Visual Studio 2005.txt文件(2)窗体及窗体上各控件的属性设置如表7-2所示。表7-2 窗体各控件的属性设置控件类型控件名称属性设置结果FormForm1Text例7-1ButtonButton1NamebtnReadLineText读取“D:”的“Visual Studio 2005.txt”文件RichTextBoxRichTextBox1NamertxtVS2005ReadOnlyTrue(3)首先引入命名空间,代码如下:/*using System.IO;/*(4)然后切换到窗体设计器,双击【读取“D:”的“Visual Studio 2005.txt”文件】按钮,编写其单击事件代码如下:/*/ 【读取“D:”的“Visual Studio 2005.txt”文件】按钮的单击事件代码/*private void btnReadLine_Click(object sender, EventArgs e) StreamReader sr = new StreamReader (D:Visual Studio 2005.txt, Encoding.GetEncoding(GB2312); string line; string strShow = ; while (line = sr.ReadLine() != null) strShow = strShow + line + n; rtxtVS2005.Text = strShow; sr.Close();/*/*(5)运行程序,单击【读取“D:”的“Visual Studio 2005.txt”文件】按钮,则在高级文本框中显示了“Visual Studio 2005.txt”文件的所有文本内容,如图7-8所示。图7-8 读取文件2. 写入文本文件专门用于写入文本文件的类是StreamWriter类,同样的,它的构造函数也有多个重载,其中最常用的一个的一般形式如下:public StreamWriter(string path, bool append, Encoding encoding)说明: 参数path为要写入的文本文件的路径; 参数append是一个布尔值,指定了写入文本的方式。如果该文件不存在,则创建新文件;如果文件存在,且append参数为true,则将数据追加到文本中;若append参数为false,则改写原文本。 参数encoding指定了要使用的字符编码形式。 最简单的StreamWriter类构造函数只有一个path参数。即默认append为false,同时采用默认的字符编码形式。与StreamReader类相似,获取StreamWriter类实例的方法也有两种:(1)直接使用StreamWriter类,例如:/*StreamWriter sw = new StreamWriter (D:Welcome.txt, true, Encoding.GetEncoding(GB2312);/*(2)也可以使用FileInfo类来获取StreamWriter类的实例,按照这种方法获取StreamWriter类实例,其编码方式为UTF-8。例如:/*FileInfo fInfo = new FileInfo(D:Welcome.txt);StreamWriter sw = fInfo.AppendText();/ 用于追加文本StreamWriter sw = fInfo.CreateText();/ 用于写入文本/*StreamWriter类最常用的用于读取文本文件的方法是WriteLine方法和Write方法,WriteLine方法每次写入一行文本内容,即相对Write方法来说,WriteLine方法会在写入文本时使用回车换行符。【例7-2】给【例7-1】中创建的“Visual Studio 2005.txt”文件写入一行新的文本“欢迎使用 Microsoft Visual J# 2005.”。写入后的结果如图7-10所示。分析:给文本文件写入数据的方法与读取数据类似,本例使用WriteLine方法实现,具体的实现步骤如下:(1)设计程序界面如图7-9所示。图7-9 程序界面(2)窗体及按钮控件的属性设置如表7-3所示。表7-3 窗体各控件的属性设置控件类型控件名称属性设置结果FormForm1Text例8-2ButtonButton1NamebtnWriteLineText写入文本“欢迎使用 Microsoft Visual J# 2005.”(3)首先引入命名空间,代码如下:/*using System.IO;/*(4)然后切换到窗体设计器,双击【写入文本“欢迎使用 Microsoft Visual J# 2005.”】按钮,编写其单击事件代码如下:/*/ 【写入文本“欢迎使用 Microsoft Visual J# 2005.”】按钮的单击事件代码/*private void btnWriteLine_Click(object sender, EventArgs e) StreamWriter sw = new StreamWriter (D:Visual Studio 2005.txt, true, Encoding.GetEncoding(GB2312); string data = 欢迎使用 Microsoft Visual J# 2005.; sw.WriteLine(data); sw.Close();/*/*(5)运行程序,单击【写入文本“欢迎使用 Microsoft Visual J# 2005.”】按钮,然后打开“Visual Studio 2005.txt”文件,如图7-10所示。图7-10 写入文本后的“Welcome.txt”文件7.3 界面设计及属性设置7.3.1 界面设计图7-11 IP修改器用户界面7.3.2 属性设置窗体和各控件的属性设置如表7-4所示。表7-4 窗体和各控件的属性控件类型控件名称属性设置结果FormForm1TextIP修改器StartPositionCenterScreenMaximizeBoxFalseAutoSizeModeGrowAndShrinkPictureBoxPictureBox1Image选择网络连接图片(自行准备)GroupBoxGroupBox1Text修改网络设置GroupBox2TextIP 地址GroupBox3Text子网掩码和网关GroupBox4TextDNS 服务器地址GroupBox5Text教室号及其对应的网络号ComboBoxComboBox1NamecmbConnDropDownStyleDropDownListComboBox2NamecmbClassroomNumLabelLabel1Text当前 IPLabel2Text教室号Label3Text主机号Label4Text子网掩码Label5Text网 关Label6Text首先地址Label7Text备用地址Label8Text教室Label9Text网络号Label10Text教室号Label11Text(如:A101)Label12Text网络号Label13Text(尾数为0)Label14Text(如:)TextBoxTextBox1NametxtHostNumTextBox2NametxtClassroomNumMaxLength4MaskedTextBoxMaskedTextBox1NamemtxtSubNetworkMask#.#.#.#PromptChar (一个空格字符)MaskedTextBox2NamemtxtGatewayMask#.#.#.#PromptChar (一个空格字符)MaskedTextBox3NamemtxtDNS1Mask#.#.#.#PromptChar (一个空格字符)MaskedTextBox4NamemtxtDNS2Mask#.#.#.#PromptChar (一个空格字符)MaskedTextBox5NamemtxtNetworkNumMask#.#.#.#PromptChar (一个空格字符)ButtonButton1NamebtnSetText修改Button2NamebtnCloseText退出Button3NamebtnAddText添加教室号及其对应的网络号ListBoxListBox1NamelstNum7.4 编写代码引入命名空间/ 使用WMIusing System.Management;/ 读写文本文件using System.IO; /* / 文件 IPList.txt 的路径 string path = Application.StartupPath + + IPList.txt; / n用来存放当前 IPList.txt 中的记录数 int n = 0; / 最多可以保存1000个条记录 string IP = new string1000; string classroomNum = new string1000; string netNum = new string1000; / selectClassroomNum用来存放被选中教室号 string selectClassroomNum; / selectNetNum用来存放被选中教室对应的网络号 string selectNetNum; / 字符串 from 用来标明是窗体载入事件还是修改 IP 时调用 showList 方法 string from = ; /* /* / 读取文件 IPList.txt 中的教室号和网络号列表的方法 /* void showList() / 使用WMI获取本地计算机的网络设置 ManagementClass mc = new ManagementClass(Win32_NetworkAdapterConfiguration); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) if (bool)moIPEnabled) / 取得本机 IP 地址,并显示在组合框中 string ipAddress = (string)moIPAddress; / 若检测到 IP 为“”,则说明上次设置的IP冲突 if (ipAddress0 != ) foreach (string add in ipAddress) / 将本

温馨提示

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

评论

0/150

提交评论