c#网络应用编程第03章 IP地址转换与网卡信息检测_第1页
c#网络应用编程第03章 IP地址转换与网卡信息检测_第2页
c#网络应用编程第03章 IP地址转换与网卡信息检测_第3页
c#网络应用编程第03章 IP地址转换与网卡信息检测_第4页
c#网络应用编程第03章 IP地址转换与网卡信息检测_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第3章IP地址转换与网卡信息检测,3.1IP地址转换与域名解析3.2网卡信息检测与网络流量检测3.3网络数据编码与解码,本章教学目的学习IP地址转换的基本方法,了解网卡信息检测与网络流量检测相关类的用法,掌握编码与解码的概念及用法。本章教学要求(1)掌握IP地址、端口号的基本概念;(2)掌握IPAddress、IPEndPoint、IPHostEntry类的用法;(3)进行Dns类完成域名解析的方法。(4)掌握Ping类的用法;(5)了解NetworkInterface类、IPInterfaceProperties类获取网卡信息的方法;,本章重点,本章教学要求(续)(6)了解IPGlobalProperties类获取网络流量统计信息的方法。(7)掌握编码、解码的概念。(8)掌握Encoding类的用法。(9)了解Encoder类和Decoder类的用法。教学难点和重点IP地址转换的基本方法,掌握编码与解码的概念及用法。,本章重点,3.1IP地址转换与域名解析,3.1.1IP地址与端口IP地址、端口号的基本概念知识3.1.2IP地址转换相关类IPAddress、IPEndPoint、IPHostEntry类的用法3.1.3域名解析Dns类进行域名解析的方法,3.1.1IP地址与端口,TCP/IP(传输控制协议/网际协议)不是一个协议,而是一组协议的总称,包括IP、TCP、UDP、ICMP、ARP等。它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据交换格式以及传送方式。,3.1.1IP地址与端口(续),IP地址:是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内惟一的标识符。一个IP地址主要由两部分组成:网络地址和主机地址。网络地址由因特网权力机构分配,主机地址由各个网络的管理员统一分配。IP地址编制方案有两种:IPV4和IPV6IPV4:二进制表示共32位(4个字节)IPV6:二进制表示共128位(16个字节)在IPV4编制方案中,一般使用点分十进制表示法表示IP地址。例如:,3.1.1IP地址与端口(续),子网掩码:子网掩码用于屏蔽IP地址的一部分以区别网络标识和主机标识。把所有的网络位(二进制)用1来标识,主机位用0来标识。例如:对于IP地址192.168.0.X,可以将子网掩码设置为,对于IP地址192.168.0.X,其网络标示部分为192.168.0;主机标示为:X,3.1.1IP地址与端口(续),端口:IP地址仅仅能够具体标识到某台主机,而端口则表示与计算机上的哪个进程通信。根据IP地址找到是与哪台机器通信,根据端口号找到是与该机器的哪个进程通信。(一个进程可能会使用多个端口)端口地址的范围是十进制的065535,3.1.2IP地址转换相关类,IPAddress类(System.Net命名空间下):常用IPAddress的Parse方法将IP地址字符串转换为IPAddress的实例。例如:IPAddressip=IPAddress.Parse(“”);构造函数有:(1)publicIPAddress(byteaddress)byteiparray=newbyte143,24,20,36;IPAddresslocalIP=newIPAddress(iparray);(2)publicIPAddress(longnewAddress)longip=0 x2414188f;IPAddresslocalIP=newIPAddress(ip);,3.1.2IP地址转换相关类(续),IPAddress类常用属性Any提供一个IPv4地址,指示服务器应侦听所有网络接口上的客户端活动。(等效于)Broadcast提供IPv4广播地址(等效于55)Loopback表示IPv4回送地址(等效于)None表示Socket不应侦听客户端活动(不使用任何网络接口)。IPv6Any提供可用的IPv6地址IPv6Loopback表示IPv6回送地址IPv6None提供不使用任何网络接口。,3.1.2IP地址转换相关类(续),IPEndPoint类包含了连接到主机上的服务所需的IP地址和端口信息。IPEndPoint类常用的构造函数为:publicIPEndPoint(IPAddress,int);其中第一个参数指定IP地址,第二个参数指定端口号。,3.1.2IP地址转换相关类(续),IPHostEntry类的对象中包含了与主机相关的信息。常用属性:(1)AddressList属性:获取或设置与主机关联的IP地址列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址;(2)HostName属性:包含了服务器的主机名。(3)Aliases属性包含了与主机关联的别名列表。在Dns类中,有一个专门获取IPHostEntry对象的方法。例如:IPAddressips=Dns.GetHostEntry(“).AddressList;,3.1.3域名解析,DNS(DomainNameSystem,域名系统)提供了一系列静态的方法,用于获取提供本地或远程域名等功能,常用方法有:(1)GetHostAddresses方法获取指定主机的IP地址,返回一个IPAddress类型的数组。格式为:publicstaticIPAddressGetHostAddresses(stringhostNameOrAddress);例如:IPAddressips=Dns.GetHostAddresses();注意:如果hostNameOrAddress是IP地址,则不查询DNS服务器,直接返回此地址。,3.1.3域名解析(续),(2)GetHostEntry方法在DNS服务器中查询与某个主机名或IP地址关联的IP地址。当参数为空字符串时,此方法返回本地主机的IPv4地址和主机名。例如:IPHostEntryhost=Dns.GetHostEntry();listBox1.Items.AddRange(host.AddressList);/本机所有IPv4地址listBox1.Items.Add(host.HostName);/本机主机名(3)GetHostName方法获取本机主机名。例如:stringhostname=Dns.GetHostName();,3.1.3域名解析(续),【例3-1】演示IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法,设计界面如图2-1所示。单击“显示本机IP信息”按钮可以显示主机名及相关的IP地址;单击“显示服务器信息”按钮可显示中央电视台服务器的IP地址信息。,3.2网卡信息检测与网络流量检测,3.2.1网卡信息检测相关类3.2.2网络流量信息检测相关类3.2.3Ping及其相关类,3.2网卡信息检测与网络流量检测,网络适配器:又称网卡或网络接口卡(NIC),是连接计算机与网络的硬件设备。整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送。System.Net.NetworkInformation命名空间提供了:对本机网卡相关信息的检测比如本机有多少网卡,网卡名称、速度、硬件地址等。对本机网络流量的检测比如网络连接配置、接收与发送的数据包等。Ping类检测本机是否可访问网络上的其它计算机。,3.2网卡信息检测与网络流量检测,NetworkInterface类NetworkInterface类提供了网络适配器的配置和统计信息。可以利用这个类检测本机有多少个网络适配器、网络适配器型号以及网络适配器的速度等。IPInterfaceProperties类可以利用这个类检测本机所有网络适配器支持的各种地址PhysicalAddress类提供了网络适配器的媒体访问控制(MAC)地址。,3.2.1网卡信息检测相关类,1NetworkInterface类位于System.Net.NetworkInformation命名空间下,它提供了网络适配器的配置和统计信息。该类可以方便地检测本机有多少个网卡、哪些网络连接可用,并可获取某个网卡的型号、MAC地址和速度等信息。对于本机的每个网络适配器,该数组中都包含一个NetworkInterface对象与之对应。获取实例:不能直接使用new关键字构造该类的实例,而是利用NetworkInterface类提供的静态方法GetAllNetworkInterfaces,得到NetworkInterface类型的数组。NetworkInterfaceadapters=NetworkInterface.GetAllNetworkInterfaces();,3.2.1网卡信息检测相关类(续),NetworkInterface类常用的属性和方法,3.2.1网卡信息检测相关类(续),2.IPInterfaceProperties类:检测本机所有网络适配器支持的各种地址(IPv4和IPv6的网络适配器地址信息),如Dns服务器的IP地址、网关地址以及多路广播地址。获取实例:NetworkInterfaceadapters=NetworkInterface.GetAllNetworkInterfaces();IPInterfacePropertiesadapterProperties=adapters0.GetIPProperties();,3.2.1网卡信息检测相关类(续),IPInterfaceProperties类常用的属性和方法,3.2.1网卡信息检测相关类(续),【例3-2】获取本机网络适配器的个数、型号、速度、MAC地址以及DNS服务器信息。,3.2.2网络流量信息检测相关类,IPGlobalProperties类提供本地计算机网络连接相关的信息。例如网络连接配置、接收与发送的数据包等。IPGlobalPropertiesproperties=IPGlobalPropeties.GetIPGlobalProperties();IPGlobalPropertiesproperties=IPGlobalPropeties.GetIPGlobalProperties()IPGlobalStatisticsipstat=properties.GetIPv4GlobalStatistics();listBox1.Items.Add(本机所在域:+properties.DomainName);listBox1.Items.Add(接收数据包数:+ipstat.ReceivedPackets);listBox1.Items.Add(转发数据包数:+ipstat.ReceivedPacketsForwarded);,3.2.2网络流量信息检测相关类(续),TcpConnectionInformation类提供有关本地计算机上的传输控制协议(TCP)连接的信息。IPGlobalPropertiesproperties=IPGlobalProperties.GetIPGlobalProperties();TcpConnectionInformationconnections=properties.GetActiveTcpConnections();foreach(TcpConnectionInformationtinconnections)stringstr=;str+=Localendpoint:+t.LocalEndPoint.Address;str+=,Remoteendpoint:+t.RemoteEndPoint.Address;str+=,+t.State;listBox1.Items.Add(str);,3.2.2网络流量信息检测相关类(续),【例3-3】检测本机网络流量以及TCP连接信息。,3.2.3Ping及其相关类,可以使用Ping类检测本机是否可访问网络上的其它计算机。类似于Ping.exe命令行工具。该类提供的Send和SendAsync方法将Internet控制消息协议(ICMP)回送请求消息发送到远程计算机并等待来自该计算机的ICMP回送答复消息。与Ping类一起使用的类型有:IPStatus枚举:定义描述ICMP回送请求消息结果的状态代码PingOptions类:控制如何传输Ping数据包PingReply类:提供有关Send或SendAsync操作的状态及产生的数据的信息,3.2.3Ping及其相关类,Ping类Send方法(1)publicPingReplySend(IPAddressaddress)此方法向address参数指定的主机发送一个包含回送消息的32位Byte数据,然后等待应答消息5秒钟。如果在上述时间内没有收到应答,则直接返回,并将PingReply实例的Status属性设置为TimedOut。例如:PingpingSender=newPing();PingReplyreply=pingSender.Send();,3.2.3Ping及其相关类,Ping类Send方法(2)publicPingReplySend(stringhostNameOrAddress,inttimeout,bytebuffer,PingOptionsoptions)参数说明:hostNameOrAddress表示目标计算机IP地址或者主机名。timeout指定发送回送消息后,等待答复消息的最大毫秒数。Buffer是一个Byte数组,存放和回送消息一起发送的数据。Options是一个PingOptions对象,用于控制如何传输Ping数据包。,3.2.3Ping及其相关类(续),PingOptions类:控制如何传输Ping数据包。与此类相关的属性有:Ttl属性为Ping类发送的数据包指定生存时间。此值指示在丢弃Ping数据包之前可以转发此数据包的路由节点数。如果要测试将数据包从源计算机发送到目标计算机所需的转发数(也称为跃点),设置此选项很有用。DontFragment属性控制是否可将发送到远程主机的数据分成多个数据包。如果要测试用于传输数据包的路由器和网关的最大传输单元(MTU),此选项很有用。,3.2.3Ping及其相关类(续),PingReply类调用Ping类的Send方法后,即得到PingReply类的实例,该实例提供有关Send或SendAsync操作的状态以及发送请求和接收答复所用的时间等信息。常用属性有1.Address属性:获取发送回送答复消息的主机地址2.RoundtripTime属性:获取发送消息所用的往返时间3.Status属性:获取答复的状态,为IPStatus枚举类型。如果值为IPStatus.Success则代表Send方法执行成功,3.2.3Ping及其相关类(续),【例3-4】Ping类的用法。,3.3网络数据编码与解码,3.3.1Encoding类3.3.2Encoder类和Decoder类,3.3网络数据编码与解码,编码:是指将一组字符转换为一个字节序列的过程。解码:将一个编码字节序列转换为一组字符的过程。为什么需要编码和解码因为通过网络传递的数据必须是字节序列。常用编码:ASCII、Unicode、UTF、国标码,3.3网络数据编码与解码,常用编码ASCII码:每个字符均为7位,主要针对英文。UNICODE码:每个字符均占两个字节。UTF码:通用转换码,主要解决编码容量问题,常用有(1)UTF-8:用1到4个字节编码一个UNICODE字符(2)UTF-16:将每个字符编码为1至2个16位整数组成的序列(3)UTF-32:将每个字符编码为一个32位整数国标码:常用有GB2312(1980年公布)GB18030(2000年公布),3.3.1Encoding类,Encoding类位于System.Text命名空间中。常用属性及方法如下:,3.3.1Encoding类(续),1获取所有编码名称及其描述信息GetEncodings方法获得包含所有编码的EncodingInfo数组。下面的代码可以获取所有编码的名称及其名称描述。foreach(EncodingInfoeiinEncoding.GetEncodings()Encodingen=ei.GetEncoding();listBox1.Items.Add(string.Format(0,-181,ei.Name,en.EncodingName);,3.3.1Encoding类(续),2获取某个指定的编码描述信息1)访问UTF8、ASCII等属性,直接获得其他非Unicode的某个指定字符集的编码实例。EncodingASCIIEncode=Encoding.ASCII;2)利用静态方法GetEndcoing来获取编码实例,例如:EncodingGB2312Encoding=Encoding.GetEncoding(GB2312);3)访问HeaderName属性,获取指定编码的名称listBox1.Items.Add(GB2312Encoding.HeaderName);14)访问EncodingName属性,显示指定编码的名称描述listBox1.Items.Add(GB2312Encoding.EncodingName);,3.3.1Encoding类(续),3不同编码之间的转换功能:Encoding类的Convert方法可将字节数组从一种编码转换为另一种编码,转换结果类型为byte。方法原型:publicstaticbyteConvert(EncodingsrcEncoding,EncodingdstEncoding,bytebytes)参数说明:srcEncoding表示源编码格式。dstEncoding表示目标编码格式。bytes参数指定了待转换的字节数。将Unicode字符串转换为UTF8字符串时,可参考以下的步骤进行。,3.3.1Encoding类(续),将Unicode字符串转换为UTF8字符串:(1)利用Encoding的UTF8和Unicode属性获取UTF8格式的编码实例utf8和Unicode格式的编码实例unicode,例如:stringunicodeString=含unicode字符Pi(u03a0);Encodingunicode=Encoding.Unicode;Encodingutf8=Encoding.UTF8;(2)利用unicode的GetBytes方法将Unicode字符编码为Unicode字节数组,例如:byteunicodeBytes=unicode.GetBytes(unicodeString);,3.3.1Encoding类(续),(3)利用Encoding的Convert方法将Unicode字节数组转换为UTF8字节数组,例如:byteutf8Bytes=Encoding.Convert(Encoding.Unicode,Encoding.UTF8,unicodeBytes);(4)最后,利用ut8的GetString方法将UTF8字节数组解码为UTF8字符串,例如:stringutf8String=utf8.GetString(utf8Bytes);,2.3.2Encoder类和Decoder类,为什么使用Encoder及Decoder类?在网络传输和文件操作中,如果数据量比较大,需要划分为较小的块,此时可能出现一个数据块的末尾是一个不匹配的高代理项,而与其匹配的低代理项则位于下一个数据块中。对于这种情况,直接使用Encoding类的GetBytes方法编写程序就比较繁琐。此时,可以利用Encoder类轻松地解决这个问题。,3.3.2Encoder类和Decoder类(续),Encoder类Encoder类位于System.Text名称空间下,利用它可以将一组字符转换为一个字节序列。(1)获取Encoder实例:利用GetEncoder方法获取实例/获取ASCII编码的Encoder实例EncoderasciiEncoder=Encoding.ASCII.GetEncoder();/获取Unicode编码的Encoder实例EncoderunicodeEncoder

温馨提示

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

评论

0/150

提交评论