第03章 IP地址转换与网卡信息检测_第1页
第03章 IP地址转换与网卡信息检测_第2页
第03章 IP地址转换与网卡信息检测_第3页
第03章 IP地址转换与网卡信息检测_第4页
第03章 IP地址转换与网卡信息检测_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、1 1第第3章章 IP地址转换与网卡信息检测地址转换与网卡信息检测3.1 IP地址转换与域名解析地址转换与域名解析3.2 网卡信息检测与网络流量检测网卡信息检测与网络流量检测3.3 网络数据编码与解码网络数据编码与解码2 2 本章教学目的本章教学目的学习学习IP地址转换的基本方法,了解地址转换的基本方法,了解网卡信息检测与网络流量网卡信息检测与网络流量检测检测相关类的用法,掌握相关类的用法,掌握编码与解码编码与解码的概念及用法。的概念及用法。 本章教学要求本章教学要求(1)掌握)掌握IP地址、端口号的基本概念;地址、端口号的基本概念;(2)掌握)掌握IPAddress、IPEndPoint、I

2、PHostEntry类的用法类的用法 ;(3)进行)进行Dns类完成域名解析的方法。类完成域名解析的方法。(4)掌握)掌握Ping类的用法;类的用法;(5)了解)了解NetworkInterface类、类、IPInterfaceProperties类类获取获取网卡信息的方法网卡信息的方法;本章重点本章重点3 3 本章教学要求(续)本章教学要求(续)(6)了解)了解IPGlobalProperties 类获取网络流量统计信息的方法。类获取网络流量统计信息的方法。(7)掌握编码、解码的概念。)掌握编码、解码的概念。(8)掌握)掌握Encoding类的用法。类的用法。(9)了解)了解Encoder类

3、和类和Decoder类的用法。类的用法。 教学难点和重点教学难点和重点 IP地址转换的基本方法,掌握地址转换的基本方法,掌握编码与解码编码与解码的概念及用法。的概念及用法。本章重点本章重点4 43.1 IP地址转换与域名解析地址转换与域名解析3.1.1 IP地址与端口地址与端口 IP地址、端口号的基本概念知识地址、端口号的基本概念知识3.1.2 IP地址转换相关类地址转换相关类 IPAddress、IPEndPoint、IPHostEntry类的用法类的用法3.1.3 域名解析域名解析 Dns类进行域名解析的方法类进行域名解析的方法5 53.1.1 IP地址与端口地址与端口 TCP/IP(传输

4、控制协议(传输控制协议/网际协议)不是网际协议)不是一个一个协议,而是协议,而是一组一组协议的总称,包括协议的总称,包括IP、TCP、UDP、ICMP、ARP等。它规范等。它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据交换格式以及传送方式。间的数据交换格式以及传送方式。6 63.1.1 IP地址与端口地址与端口 (续)(续) IP地址:地址:是给每个连接在因特网上的主机(或路由器)分配是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内惟一的标识符。一个一个在全世界范围内惟一的标识符。一个IP地址主要由两部地址主

5、要由两部分组成:网络地址和主机地址。分组成:网络地址和主机地址。 网络地址由因特网权力机构分配,主机地址由各个网络的管网络地址由因特网权力机构分配,主机地址由各个网络的管理员统一分配。理员统一分配。 IP地址编制方案地址编制方案有两种:有两种:IPV4和和IPV6IPV4:二进制表示共:二进制表示共32位(位(4个字节)个字节)IPV6:二进制表示共:二进制表示共128位(位(16个字节)个字节) 在在IPV4编制方案中,一般使用点分十进制表示法表示编制方案中,一般使用点分十进制表示法表示IP地址。地址。例如:例如: 73.1.1 IP地址与端口地址与端口 (续)(续)子

6、网掩码:子网掩码:子网掩码用于屏蔽子网掩码用于屏蔽IP地址的一部分以区别地址的一部分以区别网络标识和主机标识。把所有的网络位(二进制)用网络标识和主机标识。把所有的网络位(二进制)用1来标识,主机位用来标识,主机位用0来标识。来标识。例如例如:如果将子网掩码设置为如果将子网掩码设置为,则对于,则对于IP地址地址192.168.1.X,其网络标示部分为其网络标示部分为192.168.1;主;主机标示为:机标示为:X8 83.1.1 IP地址与端口地址与端口 (续)(续)端口:端口:IP地址仅仅能够具体标识到某台计算机,而端地址仅仅能够具体标识到某台计算机,而端口则表示与

7、计算机上的哪个进程通信。口则表示与计算机上的哪个进程通信。根据根据IP地址找到是与哪台机器通信,根据端口号找到地址找到是与哪台机器通信,根据端口号找到是与该机器的哪个进程通信。是与该机器的哪个进程通信。 (一个进程可能会使用一个进程可能会使用多个端口多个端口)端口地址用端口地址用2个字节表示,所以范围是个字节表示,所以范围是0216-1,即十,即十进制的进制的0655359 93.1.2 IP地址转换相关类地址转换相关类 IPAddress类类(System.Net命名空间下命名空间下):常用常用IPAddress的的Parse方法方法将将IP地址字符串转换为地址字符串转换为IPAddress

8、的实例。的实例。例如:例如:IPAddress ip = IPAddress.Parse(“”); 构造函数构造函数有(有(了解即可了解即可):):(1)public IPAddress (byte address) byte iparray = new byte 143,24,20,36 ; IPAddress localIP = new IPAddress(iparray); (2)public IPAddress (long newAddress) long ip = 0 x2414188f; IPAddress localIP = new IPAddress(ip

9、);10103.1.2 IP地址转换相关类地址转换相关类 (续)(续) IPAddress类常用属性类常用属性1.Any :提供一个:提供一个IPv4地址,指示服务器应侦听所有网络地址,指示服务器应侦听所有网络接口上的客户端活动。(等效于接口上的客户端活动。(等效于)2.Broadcast :提供:提供IPv4广播地址(等效于广播地址(等效于55)3.Loopback:表示:表示IPv4回送地址(等效于回送地址(等效于)4.None:表示:表示Socket不应侦听客户端活动(不使用任何不应侦听客户端活动(不使用任何网络接口)。网络接口)

10、。5.IPv6Any:提供可用的:提供可用的IPv6地址地址6.IPv6Loopback:表示:表示IPv6回送地址回送地址7.IPv6None:提供不使用任何网络接口。:提供不使用任何网络接口。11113.1.2 IP地址转换相关类地址转换相关类 (续)(续) IPEndPoint类包含了连接到主机上的服务所需的类包含了连接到主机上的服务所需的IP地址和地址和端口信息。端口信息。 IPEndPoint类常用的构造函数为:类常用的构造函数为:public IPEndPoint(IPAddress, int); 其中第一个参数指定其中第一个参数指定IP地址,第二个参数指定端口号。地址,第二个参数

11、指定端口号。12123.1.2 IP地址转换相关类地址转换相关类 (续)(续) IPHostEntry类的对象中包含了与主机相关的信息。常用属性:类的对象中包含了与主机相关的信息。常用属性:(1)AddressList属性属性:获取或设置与主机关联的获取或设置与主机关联的IP地址列表,是一个地址列表,是一个IPAddress类型类型的数组,包含了指定主机的所有的数组,包含了指定主机的所有IP地址;地址; (2)HostName属性:域名或者主机名。属性:域名或者主机名。(3)Aliases属性包含了与主机关联的别名列表。属性包含了与主机关联的别名列表。在在Dns类中,有一个专门获取类中,有一个

12、专门获取IPHostEntry对象的方法。对象的方法。 例如:例如:IPAddress ips = Dns.GetHostEntry(“http:/).AddressList;13133.1.3 域名解析域名解析 DNS(Domain Name System,域名系统)提供了一系列静,域名系统)提供了一系列静态的方法,用于获取本地或远程域名等功能态的方法,用于获取本地或远程域名等功能,常用方法有:常用方法有: (1)GetHostAddresses方法方法 获取指定主机的获取指定主机的IP地址,返回一个地址,返回一个IPAddress类型的数组。格类型的数组。格式为:式为: public st

13、atic IPAddress GetHostAddresses(string hostNameOrAddress);例如:例如:IPAddress ips=Dns.GetHostAddresses();注意:如果注意:如果hostNameOrAddress是是IP地址,则不查询地址,则不查询DNS服务器,直接返回此地址。服务器,直接返回此地址。14143.1.3 域名解析域名解析(续)(续)(2)GetHostEntry方法方法 在在DNS服务器中查询与某个主机名或服务器中查询与某个主机名或IP地址关联的地址关联的IP地址。地址。 当参数为空字符串时,此方法返回本地主机的当参数为空字符串时,此

14、方法返回本地主机的IPv4地址和主地址和主机名。机名。 例如:例如: IPHostEntry host = Dns.GetHostEntry(); ListBox1.Items.AddRange(host.AddressList); /本机所有本机所有IPv4地址地址 listBox1.Items.Add(host.HostName); /本机主机名本机主机名(3) GetHostName方法方法:获取本机主机名。获取本机主机名。 例如:例如:string hostname = Dns.GetHostName();15153.1.3 域名解析域名解析(续)(续) 【例例3-1】演示演示IPAd

15、dress类、类、Dns类、类、IPHostEntry类和类和IPEndPoint类的使用方法,设计界面如图类的使用方法,设计界面如图3-1所示。单击所示。单击“显示显示本机本机IP信息信息”按钮可以显示主机名及相关的按钮可以显示主机名及相关的IP地址;单击地址;单击“显示服务器信息显示服务器信息”按钮可显示中央电视台服务器的按钮可显示中央电视台服务器的IP地址地址信息。信息。16163.1.3 域名解析域名解析(续)(续) 上例中如果存在上例中如果存在IPv6地址,则可能显示为(示例):地址,则可能显示为(示例): 其中其中“:1”即即IPv6地址地址17173.2 网卡信息检测与网络流量检

16、测网卡信息检测与网络流量检测3.2.1 网卡信息检测相关类网卡信息检测相关类3.2.2 网络流量信息检测相关类网络流量信息检测相关类3.2.3 Ping及其相关类及其相关类18183.2 网卡信息检测与网络流量检测网卡信息检测与网络流量检测 网络适配器:网络适配器:又称网卡或网络接口卡(又称网卡或网络接口卡(NIC),是连接计算机与网络的),是连接计算机与网络的硬件设备。整理计算机上发往网线上的数据,并将数据分解硬件设备。整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送。为适当大小的数据包之后向网络上发送。 System.Net.NetworkInformation

17、命名空间提供了:命名空间提供了:1.对本机网卡相关信息的检测对本机网卡相关信息的检测比如本机有多少网卡,网卡名称、速度、硬件地址等。比如本机有多少网卡,网卡名称、速度、硬件地址等。2.对本机网络流量的检测对本机网络流量的检测比如网络连接配置、接收与发送的数据包等。比如网络连接配置、接收与发送的数据包等。3.Ping类类检测本机是否可访问网络上的其它计算机。检测本机是否可访问网络上的其它计算机。19193.2 网卡信息检测与网络流量检测网卡信息检测与网络流量检测1. NetworkInterface类类NetworkInterface类提供了网络适配器的配置和统计信息。类提供了网络适配器的配置和

18、统计信息。可以利用这个类检测本机有多少个网络适配器、网络适配可以利用这个类检测本机有多少个网络适配器、网络适配器型号以及网络适配器的速度等。器型号以及网络适配器的速度等。2. IPInterfaceProperties类类可以利用这个类检测本机所有网络适配器支持的各种地址可以利用这个类检测本机所有网络适配器支持的各种地址3. PhysicalAddress类类提供了网络适配器的提供了网络适配器的MAC地址(也叫网卡物理地址)。地址(也叫网卡物理地址)。 20203.2.1 网卡信息检测相关类网卡信息检测相关类1NetworkInterface类类 位于位于System.Net.NetworkI

19、nformation命名空间下命名空间下 提供网络适配器的配置和统计信息。例如本机有多少个网提供网络适配器的配置和统计信息。例如本机有多少个网卡、哪些网络连接可用、网卡型号、卡、哪些网络连接可用、网卡型号、MAC地址和速度等。地址和速度等。 本机的每个网络适配器都包含一个本机的每个网络适配器都包含一个NetworkInterface对象对象与之对应。与之对应。 获取实例:获取实例:利用利用NetworkInterface类提供的静态方法得到类提供的静态方法得到NetworkInterface类型的数组。例如:类型的数组。例如: NetworkInterface adapters = Netwo

20、rkInterface.GetAllNetworkInterfaces();21213.2.1 网卡信息检测相关类网卡信息检测相关类(续)(续) NetworkInterface类常用的属性和方法类常用的属性和方法 属性及方法属性及方法说明说明Name属性属性获取网络适配器的名称获取网络适配器的名称Speed属性属性获取网络适配器的速度(获取网络适配器的速度(bit/bit/秒)秒)GetAllNetworkInterfaces方法方法返回描述本地计算机上的所有网络适配器对象返回描述本地计算机上的所有网络适配器对象GetIPProperties方法方法回描述此网络适配器配置的对象回描述此网络适

21、配器配置的对象GetIsNetworkAvailable方法方法指示是否有任何可用的网络连接指示是否有任何可用的网络连接GetPhysicalAddress方法方法返回此适配器的媒体访问控制返回此适配器的媒体访问控制(MAC)(MAC)地址地址Supports方法方法指示指示接口接口是否支持指定的协议(是否支持指定的协议(IPv4IPv4或或IPv6IPv6)22223.2.1 网卡信息检测相关类网卡信息检测相关类(续)(续)2.IPInterfaceProperties类:类: 检测本机所有网络适配器支持的各种地址(检测本机所有网络适配器支持的各种地址(IPv4和和IPv6的的网络适配器地址

22、信息),如网络适配器地址信息),如Dns服务器的服务器的IP地址、网关地地址、网关地址以及多路广播地址。址以及多路广播地址。 获取实例:获取实例:NetworkInterface adapters = NetworkInterface.GetAllNetworkInterfaces();IPInterfaceProperties adapterProperties = adapters0.GetIPProperties();23233.2.1 网卡信息检测相关类网卡信息检测相关类(续)(续) IPInterfaceProperties类常用的属性和方法类常用的属性和方法 属性及方法属性及方法说

23、说 明明AnycastAddresses属性属性获取分配给此接口的任意广播获取分配给此接口的任意广播IPIP地址地址DhcpServerAddresses属性属性获取此接口的动态主机配置协议(获取此接口的动态主机配置协议(DHCP)服务器的地址)服务器的地址DnsAddresses属性属性获取此接口的域名系统(获取此接口的域名系统(DNSDNS)服务器的地址)服务器的地址DnsSuffix属性属性获取与此接口关联的域名系统(获取与此接口关联的域名系统(DNSDNS)后缀)后缀GatewayAddresses属性属性获取此接口的网关地址获取此接口的网关地址MulticastAddresses属性

24、属性获取分配给此接口的多路广播地址获取分配给此接口的多路广播地址UnicastAddresses属性属性获取分配给此接口的单播地址获取分配给此接口的单播地址GetIPv4Properties方法方法获取此网络接口的获取此网络接口的InternetInternet协议版本协议版本4 4(IPv4IPv4)配置数据)配置数据GetIPv6Properties方法方法获取此网络接口的获取此网络接口的InternetInternet协议版本协议版本6 6(IPv6IPv6)配置数据)配置数据24243.2.1 网卡信息检测相关类网卡信息检测相关类(续)(续) 【例例3-2】获取本机网络适配器的个数、型

25、号、速度、获取本机网络适配器的个数、型号、速度、MAC地址以及地址以及DNS服务器信息服务器信息(书上程序有错)(书上程序有错) 错误更正错误更正:listBoxAdpterInfo.Items.Add(MAC地址:地址: + BitConverter.ToString(adapter.GetPhysicalAddress().GetAddressBytes();2525例例3-2 运行结果运行结果26263.2.2 网络流量信息检测相关类网络流量信息检测相关类 IPGlobalProperties类类 提供本机网络连接相关的信息。例如网络连接配置、接收与提供本机网络连接相关的信息。例如网络连

26、接配置、接收与发送的数据包等。发送的数据包等。 IPGlobalProperties properties = IPGlobalPropeties.GetIPGlobalProperties(); IPGlobalProperties properties = IPGlobalPropeties.GetIPGlobalProperties() IPGlobalStatistics ipstat = properties.GetIPv4GlobalStatistics(); listBox1.Items.Add(本机所在域本机所在域 : + properties.DomainName); lis

27、tBox1.Items.Add(接收数据包数接收数据包数 : + ipstat.ReceivedPackets); listBox1.Items.Add(转发数据包数转发数据包数 : + ipstat.ReceivedPacketsForwarded);27273.2.2 网络流量信息检测相关类(续)网络流量信息检测相关类(续) TcpConnectionInformation类类提供本机传输控制协议提供本机传输控制协议(TCP)连接的信息。连接的信息。IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalPropertie

28、s();TcpConnectionInformation connections = properties.GetActiveTcpConnections();foreach (TcpConnectionInformation t in connections) string str = 本机本机: + t.LocalEndPoint.Address+ ,远程远程: + t.RemoteEndPoint.Address+ , 状态状态: + t.State; listBox1.Items.Add(str);28283.2.2 网络流量信息检测相关类(续)网络流量信息检测相关类(续) 【例例3-

29、3】检测本机网络流量以及检测本机网络流量以及TCP连接信息。连接信息。29293.2.3 Ping及其相关类及其相关类 可以使用可以使用Ping类及其相关类检测本机是否可访问网络上的类及其相关类检测本机是否可访问网络上的其它计算机,实现类似于其它计算机,实现类似于Ping.exe的功能。的功能。 该类提供的该类提供的Send和和SendAsync方法将方法将“Internet控制消控制消息协议息协议(ICMP)”回送请求消息发送到远程计算机并等待来回送请求消息发送到远程计算机并等待来自该计算机的自该计算机的ICMP回送答复消息。回送答复消息。 与与Ping类一起使用的类型有:类一起使用的类型有

30、:1. IPStatus枚举:定义描述枚举:定义描述 ICMP 回送请求消息结果的状回送请求消息结果的状态代码态代码 2. PingOptions类:控制如何传输类:控制如何传输 Ping 数据包数据包3. PingReply类:提供有关类:提供有关 Send 或或 SendAsync 操作的状操作的状态及产生的数据的信息态及产生的数据的信息 30303.2.3 Ping及其相关类及其相关类Ping类类Send方法方法(1)public PingReply Send(IPAddress address)向向address参数指定的主机发送一个包含回送消息的参数指定的主机发送一个包含回送消息的3

31、2位位字节数据,然后等待应答消息(默认字节数据,然后等待应答消息(默认5秒)。如果在上述时秒)。如果在上述时间内没有收到应答,则直接返回,并将间内没有收到应答,则直接返回,并将PingReply实例的实例的Status属性设置为属性设置为TimedOut。例如:。例如:Ping pingSender = new Ping ();PingReply reply = pingSender.Send ();31313.2.3 Ping及其相关类及其相关类Ping类类Send方法方法(2)public PingReply Send(string hostNameOrAddress,int timeou

32、t,byte buffer,PingOptions options)参数说明:参数说明:uhostNameOrAddress表示目标计算机表示目标计算机IP地址或者主机名。地址或者主机名。utimeout指定发送回送消息后,等待答复消息的最大毫秒指定发送回送消息后,等待答复消息的最大毫秒数。数。uBuffer是一个是一个Byte数组,存放和回送消息一起发送的数据。数组,存放和回送消息一起发送的数据。uOptions是一个是一个PingOptions对象,用于控制如何传输对象,用于控制如何传输Ping数据包。数据包。32323.2.3 Ping及其相关类(续)及其相关类(续) PingOptio

33、ns类:控制如何传输类:控制如何传输 Ping 数据包。与此类相数据包。与此类相关的属性有:关的属性有:1. Ttl 属性属性为为 Ping 类发送的数据包指定生存时间。此值指示在丢弃类发送的数据包指定生存时间。此值指示在丢弃 Ping 数据包之前可以转发此数据包的路由节点数。如果数据包之前可以转发此数据包的路由节点数。如果要测试将数据包从源计算机发送到目标计算机所需的转发要测试将数据包从源计算机发送到目标计算机所需的转发数(也称为跃点),设置此选项很有用。数(也称为跃点),设置此选项很有用。2. DontFragment 属性属性控制是否可将发送到远程主机的数据分成多个数据包。如控制是否可将

34、发送到远程主机的数据分成多个数据包。如果要测试用于传输数据包的路由器和网关的最大传输单元果要测试用于传输数据包的路由器和网关的最大传输单元 (MTU),此选项很有用。,此选项很有用。33333.2.3 Ping及其相关类(续)及其相关类(续)PingReply类类调用调用Ping类的类的Send方法后,即得到方法后,即得到PingReply类的实类的实例,该实例提供有关例,该实例提供有关Send或或SendAsync操作的状态以及操作的状态以及发送请求和接收答复所用的时间等信息。常用属性有发送请求和接收答复所用的时间等信息。常用属性有 1. Address属性:属性:获取发送回送答复消息的主机

35、地址获取发送回送答复消息的主机地址 2. RoundtripTime属性:属性: 获取发送消息所用的往返时间获取发送消息所用的往返时间 3. Status属性:属性:获取答复的状态,为获取答复的状态,为IPStatus枚举类型。如果值为枚举类型。如果值为IPStatus.Success则代表则代表Send方法执行成功方法执行成功34343.2.3 Ping及其相关类(续)及其相关类(续) 【例例3-4】Ping类的用法。类的用法。35353.3 网络数据编码与解码网络数据编码与解码3.3.1 Encoding类类3.3.2 Encoder类和类和Decoder类类36363.3 网络数据编码与

36、解码网络数据编码与解码 编码:编码:是指将一组字符转换为一个字节序列的过程。是指将一组字符转换为一个字节序列的过程。 解码:解码:将一个编码字节序列转换为一组字符的过程。将一个编码字节序列转换为一组字符的过程。 为什么需要编码和解码为什么需要编码和解码因为通过网络传递的数据必须是字节序列。因为通过网络传递的数据必须是字节序列。 常用编码:常用编码:ASCII、Unicode、UTF8、国标码国标码37373.3 网络数据编码与解码网络数据编码与解码 常用编码常用编码1.ASCII码:每个字符均为码:每个字符均为7位,主要针对英文。位,主要针对英文。2.UNICODE码:每个字符均占两个字节。码

37、:每个字符均占两个字节。3.UTF码:通用转换码,主要解决编码容量问题码:通用转换码,主要解决编码容量问题.常用有常用有(1)UTF-8:用:用1到到4个字节编码一个个字节编码一个UNICODE字符字符 (2)UTF-16:将每个字符编码为:将每个字符编码为1至至2个个16位整数组位整数组成的序列(两字节)成的序列(两字节) (3)UTF-32:将每个字符编码为一个:将每个字符编码为一个32位整数(位整数(4字节)字节) 4.国标码:常用有国标码:常用有 GB2312(1980年公布)年公布) GB18030(2000年公布)年公布)38383.3.1 Encoding类类Encoding类位

38、于类位于System.Text命名空间中。常用属命名空间中。常用属性及方法如下性及方法如下:名称名称说明说明DefaultDefault属性属性获取系统的当前获取系统的当前ANSIANSI代码页的编码代码页的编码UnicodeUnicode属性属性获取使用获取使用 Little-Endian Little-Endian 字节顺序的字节顺序的 UTF-16 UTF-16 格式的编码格式的编码UTF8UTF8属性属性获取获取UTF-8UTF-8格式的编码格式的编码ConvertConvert方法方法将字节数组从一种编码转换为另一种编码将字节数组从一种编码转换为另一种编码GetBytesGetByt

39、es方法方法将一组字符编码为一个字节序列将一组字符编码为一个字节序列GetStringGetString方方法法将一个字节序列解码为一个字符串将一个字节序列解码为一个字符串GetEncoderGetEncoder方方法法获取一个解码器,该解码器将获取一个解码器,该解码器将UnicodeUnicode字符序列转换为已编字符序列转换为已编码的字节序列码的字节序列GetDecoderGetDecoder方方法法获取一个解码器,该解码器将已编码的字节序列转换为字符获取一个解码器,该解码器将已编码的字节序列转换为字符序列序列39393.3.1 Encoding类(续)类(续)1获取所有编码名称及其描述信

40、息获取所有编码名称及其描述信息GetEncodings方法获得包含所有编码的方法获得包含所有编码的EncodingInfo数组。下面的代码可以获取所有编码的名称数组。下面的代码可以获取所有编码的名称及其名称描述。及其名称描述。foreach (EncodingInfo ei in Encoding.GetEncodings() Encoding en = ei.GetEncoding(); listBox1.Items.Add(string.Format(0,-181, ei.Name, en.EncodingName);40403.3.1 Encoding类(续)类(续)2获取某个指定的编码

41、描述信息获取某个指定的编码描述信息1)访问)访问UTF8、ASCII等属性,直接获得其他非等属性,直接获得其他非Unicode的某的某个指定字符集的编码实例。个指定字符集的编码实例。uEncoding ASCIIEncode = Encoding.ASCII;2)利用静态方法)利用静态方法GetEndcoing来获取编码实例,例如:来获取编码实例,例如:uEncoding GB2312Encoding = Encoding.GetEncoding(GB2312);3)访问)访问HeaderName属性,获取指定编码的名称属性,获取指定编码的名称ulistBox1.Items.Add(GB231

42、2Encoding. HeaderName);4)访问)访问EncodingName属性,显示指定编码的名称描述属性,显示指定编码的名称描述ulistBox1.Items.Add(GB2312Encoding.EncodingName);41413.3.1 Encoding类(续)类(续)3不同编码之间的转换不同编码之间的转换 功能:功能:Encoding类的类的Convert方法可将字节数组从一种编方法可将字节数组从一种编码转换为另一种编码,转换结果类型为码转换为另一种编码,转换结果类型为byte 。 方法原型:方法原型:public static byte Convert(Encoding

43、 srcEncoding, Encoding dstEncoding, byte bytes) 参数说明:参数说明:usrcEncoding表示源编码格式。表示源编码格式。udstEncoding表示目标编码格式。表示目标编码格式。ubytes参数指定了待转换的字节数。参数指定了待转换的字节数。u将将Unicode字符串转换为字符串转换为UTF8字符串时,可参考以下的步字符串时,可参考以下的步骤进行。骤进行。42423.3.1 Encoding类(续)类(续) 将将Unicode字符串转换为字符串转换为UTF8字符串:字符串:(1)利用)利用Encoding的的UTF8和和Unicode属性属

44、性获取获取UTF8格式的编码实例格式的编码实例utf8和和Unicode格式的编码实例格式的编码实例unicode,例如:,例如:string unicodeString = 含含unicode字符字符Pi(u03a0);Encoding unicode = Encoding.Unicode;Encoding utf8 = Encoding.UTF8;(2)利用)利用unicode的的GetBytes方法将方法将Unicode字符编字符编码为码为Unicode字节数组,例如:字节数组,例如:byte unicodeBytes = unicode.GetBytes(unicodeString);

45、43433.3.1 Encoding类(续)类(续)(3)利用)利用Encoding的的Convert方法方法将将Unicode字节数字节数组转换为组转换为UTF8字节数组,例如:字节数组,例如:byte utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, unicodeBytes);(4)最后,利用)最后,利用ut8的的GetString方法方法将将UTF8字节数字节数组解码为组解码为UTF8字符串,例如:字符串,例如:string utf8String = utf8.GetString(utf8Bytes);44442

46、.3.2 Encoder类和类和Decoder类类为什么使用为什么使用Encoder及及Decoder类?类?u在网络传输和文件操作中,如果数据量比较大,在网络传输和文件操作中,如果数据量比较大,需要划分为较小的块,此时可能出现一个数据块需要划分为较小的块,此时可能出现一个数据块的末尾是一个不匹配的高代理项,而与其匹配的的末尾是一个不匹配的高代理项,而与其匹配的低代理项则位于下一个数据块中。低代理项则位于下一个数据块中。u对于这种情况,直接使用对于这种情况,直接使用Encoding类的类的GetBytes方法编写程序就比较繁琐。此时,可以利用方法编写程序就比较繁琐。此时,可以利用Encoder

47、类轻松地解决这个问题。类轻松地解决这个问题。45453.3.2 Encoder类和类和Decoder类(续)类(续) Encoder类类Encoder类位于类位于System.Text名称空间下,利用它可以名称空间下,利用它可以将一组字符转换为一个字节序列。将一组字符转换为一个字节序列。(1)获取获取Encoder实例:实例:利用利用GetEncoder方法获取实例方法获取实例/获取获取ASCII编码的编码的Encoder实例实例 Encoder asciiEncoder = Encoding.ASCII.GetEncoder();/获取获取Unicode编码的编码的Encoder实例实例Encoder unicodeEncoder = Encoding.Unicode.GetEncoder();46463.3.2 Encoder类和类和Decoder类(续)类(续)(2)GetBytes方法方法GetBytes方法将一组字符编码转换为字节序列。方法将一组字符编码转换为字节序列。 参数说明:参数说明:public virtual int GetBytes( char chars, /要编码的字符数组要编码的字符数组 charIndex /第一个要编码的

温馨提示

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

评论

0/150

提交评论