第03章IP地址转换与网卡信息检测要点

上传人:工**** 文档编号:571315529 上传时间:2024-08-10 格式:PPT 页数:59 大小:1.25MB
返回 下载 相关 举报
第03章IP地址转换与网卡信息检测要点_第1页
第1页 / 共59页
第03章IP地址转换与网卡信息检测要点_第2页
第2页 / 共59页
第03章IP地址转换与网卡信息检测要点_第3页
第3页 / 共59页
第03章IP地址转换与网卡信息检测要点_第4页
第4页 / 共59页
第03章IP地址转换与网卡信息检测要点_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《第03章IP地址转换与网卡信息检测要点》由会员分享,可在线阅读,更多相关《第03章IP地址转换与网卡信息检测要点(59页珍藏版)》请在金锄头文库上搜索。

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

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

3、点和重点 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地址。例如:地址。例如:192.168.3.17 73.1.1 IP地址与端口地址与端口 (续)(续)子网掩子网掩码:子网掩子网掩码用于屏蔽用于屏蔽IP地址的一部分以区地址的一部分以区别网网络标识和主机和主机标识。把。把所有的网所有的网络位(二位(二进制)用制)用1

6、来来标识,主机位用,主机位用0来来标识。例如例如:如果将子网掩如果将子网掩码设置置为255.255.255.0,则对于于IP地址地址192.168.1.X,其网其网络标示部分示部分为192.168.1;主机;主机标示示为:X8 83.1.1 IP地址与端口地址与端口 (续)(续)端口:端口:IP地址地址仅仅能能够具体具体标识到某台到某台计算机,而端口算机,而端口则表示与表示与计算机上的哪个算机上的哪个进程通信。程通信。u根据根据IP地址找到是与哪台机器通信,地址找到是与哪台机器通信,u根据端口号找到是与根据端口号找到是与该机器的哪个机器的哪个进程通信。程通信。 (一个一个进程可能会使用多个端口

7、,程可能会使用多个端口,线程程)端口地址用端口地址用2个字个字节表示,所以范表示,所以范围是是0216-1,即十,即十进制的制的0655359 93.1.2 IP地址转换相关类地址转换相关类IPAddress类(System.Net命名空命名空间下下):常用常用IPAddress的的Parse方法方法将将IP地址字符串地址字符串转换为IPAddress的的实例。例。例如:例如:IPAddress ip = IPAddress.Parse(“192.168.1.1”);构造函数构造函数有(了解即可):有(了解即可):(1)public IPAddress (byte address) byte

8、iparray = new byte 143,24,20,36 ; IPAddress localIP = new IPAddress(iparray); (2)public IPAddress (long newAddress) long ip = 0x2414188f; IPAddress localIP = new IPAddress(ip);10103.1.2 IP地址转换相关类地址转换相关类 (续)(续)IPAddress类常用常用属性属性1.Any :提供一个:提供一个IPv4地址,指示服地址,指示服务器器应侦听所有网听所有网络接口上的客接口上的客户端活端活动。(。(等效于等效于0

9、.0.0.0)2.Broadcast :提供:提供IPv4广播地址(等效于广播地址(等效于255.255.255.255)3.Loopback:表示:表示IPv4回送地址(等效于回送地址(等效于127.0.0.1)4.None:表示:表示Socket不不应侦听客听客户端活端活动(不使用任何网(不使用任何网络接口)。接口)。5.IPv6Any:提供可用的:提供可用的IPv6地址地址6.IPv6Loopback:表示:表示IPv6回送地址回送地址7.IPv6None:提供不使用任何网:提供不使用任何网络接口。接口。11113.1.2 IP地址转换相关类地址转换相关类 (续)(续)IPEndPoin

10、t类包含了包含了连接到主机上的服接到主机上的服务所需的所需的IP地址和端口信息。地址和端口信息。 IPEndPoint类常用的构造函数常用的构造函数为:public IPEndPoint(IPAddress, int); 其中第一个参数指定其中第一个参数指定IP地址,第二个参数指定端口号。地址,第二个参数指定端口号。12123.1.2 IP地址转换相关类地址转换相关类 (续)(续)IPHostEntry类的的对象中包含了与象中包含了与主机主机相关的信息。常用相关的信息。常用属性属性:(1)AddressList属性属性:获取或取或设置与主机关置与主机关联的的IP地址列表,是一个地址列表,是一个

11、IPAddress类型的数型的数组,包含了指定,包含了指定主机的所有主机的所有IP地址;地址; (2)HostName属性:域名或者主机名。属性:域名或者主机名。(3)Aliases属性包含了与主机关属性包含了与主机关联的的别名列表。名列表。在在Dns类中,有一个中,有一个专门获取取IPHostEntry对象的方法。象的方法。 例如:例如:IPAddress ips = Dns.GetHostEntry(“http:/).AddressList;13133.1.3 域名解析域名解析DNS(Domain Name System,域名系,域名系统)提供了一系列静)提供了一系列静态的方法,用于的方法

12、,用于获取本地或取本地或远程域名等功程域名等功能能,常用常用方法方法有:有: (1)GetHostAddresses方法方法 获取指定主机的取指定主机的IP地址,返回一个地址,返回一个IPAddress类型的数型的数组。格式。格式为: public static IPAddress GetHostAddresses(string hostNameOrAddress);例如:例如:IPAddress ips=Dns.GetHostAddresses();注意:如果注意:如果hostNameOrAddress是是IP地址,地址,则不不查询DNS服服务器,直接返回器,直接返回此地址。此地址。1414

13、3.1.3 域名解析域名解析(续)(续)(2)GetHostEntry方法方法 在在DNS服服务器中器中查询与某个主机名或与某个主机名或IP地址关地址关联的的IP地址。地址。 当参数当参数为空字符串空字符串时,此方法返回,此方法返回本本地主地主机机的的IPv4地址和主机名。地址和主机名。 例如:例如: IPHostEntry host = Dns.GetHostEntry(); ListBox1.Items.AddRange(host.AddressList); /本机所有本机所有IPv4地址地址 listBox1.Items.Add(host.HostName); /本机主机名本机主机名(3

14、) GetHostName方法方法 获取本机主机名。取本机主机名。 例如:例如:string hostname = Dns.GetHostName();15153.1.3 域名解析域名解析(续)(续)【例例3-1】演示演示IPAddress类、Dns类、IPHostEntry类和和IPEndPoint类的使用方法,的使用方法,设计界面如界面如图3-1所示。所示。单击“显示本机示本机IP信息信息”按按钮可以可以显示主机名及相关的示主机名及相关的IP地址;地址;单击“显示服示服务器信息器信息”按按钮可可显示中央示中央电视台服台服务器的器的IP地址信息。地址信息。16163.1.3 域名解析域名解析

15、(续)(续)上例中如果存在上例中如果存在IPv6地址,地址,则可能可能显示示为(示例):(示例): 其中其中“:1”即即IPv6地址地址17173.2 网卡信息检测与网络流量检测网卡信息检测与网络流量检测3.2.1 网卡信息网卡信息检测相关相关类3.2.2 网网络流量信息流量信息检测相关相关类3.2.3 Ping及其相关及其相关类18183.2 网卡信息检测与网络流量检测网卡信息检测与网络流量检测网网络适配器:适配器:又称网卡或网又称网卡或网络接口卡(接口卡(NIC),是),是连接接计算机与网算机与网络的硬件的硬件设备。整理。整理计算机上算机上发往网往网线上的数据,并将数据分解上的数据,并将数

16、据分解为适当大小的数据包之后向网适当大小的数据包之后向网络上上发送。送。System.Net.NetworkInformation命名空命名空间提供了:提供了:1.对本机本机网卡网卡相关信息的相关信息的检测比如本机有多少网卡,网卡名称、速度、硬件地址等。比如本机有多少网卡,网卡名称、速度、硬件地址等。2.对本机网本机网络流量流量的的检测比如网比如网络连接配置、接收与接配置、接收与发送的数据包等。送的数据包等。3.Ping类检测本机是否可本机是否可访问网网络上的其它上的其它计算机。算机。19193.2 网卡信息检测与网络流量检测网卡信息检测与网络流量检测1.NetworkInterface类Ne

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

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

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

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

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

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

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

24、的个数、型号、速度、MAC地址以及地址以及DNS服服务器信息器信息。(。(书上程序有上程序有错) 25253.2.2 网络流量信息检测相关类网络流量信息检测相关类3. IPGlobalProperties类 提供提供本机网本机网络连接接相关的信息。例如网相关的信息。例如网络连接配置、接收与接配置、接收与发送的数据包等。送的数据包等。IPGlobalProperties properties = IPGlobalPropeties.GetIPGlobalProperties(); IPGlobalProperties properties = IPGlobalPropeties.GetIPGlo

25、balProperties() IPGlobalStatistics ipstat = properties.GetIPv4GlobalStatistics(); listBox1.Items.Add(本机所在域本机所在域 : + properties.DomainName); listBox1.Items.Add(接收数据包数接收数据包数 : + ipstat.ReceivedPackets); listBox1.Items.Add(转发数据包数数据包数 : + ipstat.ReceivedPacketsForwarded);26263.2.2 网络流量信息检测相关类(续)网络流量信息检测

26、相关类(续) TcpConnectionInformation类提供本机提供本机传输控制控制协议(TCP)连接的信息。接的信息。IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();TcpConnectionInformation connections = properties.GetActiveTcpConnections();foreach (TcpConnectionInformation t in connections) string str = 本机本机: + t.LocalEndPo

27、int.Address+ ,远程程: + t.RemoteEndPoint.Address+ , 状状态: + t.State; listBox1.Items.Add(str);27273.2.2 网络流量信息检测相关类(续)网络流量信息检测相关类(续)【例例3-3】检测本机网本机网络流量以及流量以及TCP连接信息。接信息。282829293.2.3 Ping及其相关类及其相关类可以使用可以使用Ping类及其相关及其相关类检测本机是否可本机是否可访问网网络上的其它上的其它计算机,算机,实现类似于似于Ping.exe的功能。的功能。该类提供的提供的Send和和SendAsync方法将方法将“In

28、ternet控制消息控制消息协议(ICMP)”回送回送请求消息求消息发送到送到远程程计算机并等待来自算机并等待来自该计算机的算机的ICMP回送答复消息。回送答复消息。3030ICMP的作用与特点的作用与特点1)ICMP本身是网络层的一个协议;2)ICMP是辅助IP来处理错误控制的。3)ICMP并不能保证所有的IP数据报都能够传输到目的主机;因为:ICMP不能纠正差错,它只是报告差错。 ICMP IGMP3131邮件传送中的错误邮件传送中的错误信件会遇到什么错误呢?3232ICMP报文类型报文类型 3333ICMP报文类型和代码报文类型和代码3434ICMP 差错报告报文的数据字段的内容差错报告

29、报文的数据字段的内容 首部IP数据报ICMP的前8字节装入ICMP报文的IP数据报IP数据报首部ICMP差错报告报文8字节收到的IP数据报IP数据报首部8字节ICMP差错报告报文IP数据报的数据字段ICMP 报文的封装文的封装层次次目的地址6B数据字段(461500B)帧校验字段FCS(4B)源地址6B类型字段2B3535Ping程序的原理与运行实例程序的原理与运行实例3636与与Ping类一起使用的一起使用的类型有:型有:1.IPStatus枚枚举:定:定义描述描述 ICMP 回送回送请求消息求消息结果的状果的状态代代码 2.PingOptions类:控制如何:控制如何传输 Ping 数据包

30、数据包3.PingReply类:提供有关:提供有关 Send 或或 SendAsync 操作的状操作的状态及及产生的数据的信息生的数据的信息 37373.2.3 Ping及其相关类及其相关类Ping类Send方法方法(1)public PingReply Send(IPAddress address)向向address参数指定的主机参数指定的主机发送一个包含回送消息的送一个包含回送消息的32位字位字节数据,然后等待数据,然后等待应答消息(默答消息(默认5秒)。如果在上述秒)。如果在上述时间内没有收到内没有收到应答,答,则直接返回,并将直接返回,并将PingReply实例的例的Status属性属

31、性设置置为TimedOut。例如:。例如:Ping pingSender = new Ping ();PingReply reply = pingSender.Send ();38383.2.3 Ping及其相关类及其相关类Ping类Send方法方法(2)public PingReply Send(string hostNameOrAddress,int timeout,byte buffer,PingOptions options)参数参数说明:明:uhostNameOrAddress表示目表示目标计算机算机IP地址或者主机名。地址或者主机名。utimeout指定指定发送回送消息后,等待答复

32、消息的最大毫秒数。送回送消息后,等待答复消息的最大毫秒数。uBuffer是一个是一个Byte数数组,存放和回送消息一起,存放和回送消息一起发送的数据。送的数据。uOptions是一个是一个PingOptions对象,用于控制如何象,用于控制如何传输Ping数据包。数据包。39393.2.3 Ping及其相关类(续)及其相关类(续)PingOptions类:控制如何:控制如何传输 Ping 数据包。与此数据包。与此类相关的属性有:相关的属性有:1.Ttl 属性属性(Time To Live) 为 Ping 类发送的数据包指定生存送的数据包指定生存时间。此。此值指示在指示在丢弃弃 Ping 数据包

33、之前可以数据包之前可以转发此数据包的路由此数据包的路由节点数。如果要点数。如果要测试将数据包从源将数据包从源计算机算机发送到目送到目标计算机所需的算机所需的转发数(也称数(也称为跃点),点),设置此置此选项很有用。很有用。1.DontFragment 属性属性控制是否可将控制是否可将发送到送到远程主机的数据分成多个数据包。如果要程主机的数据分成多个数据包。如果要测试用于用于传输数数据包的路由器和网关的最大据包的路由器和网关的最大传输单元元 (MTU),此,此选项很有用。很有用。40403.2.3 Ping及其相关类(续)及其相关类(续)PingReply类调用用Ping类的的Send方法后,即

34、得到方法后,即得到PingReply类的的实例,例,该实例提供有关例提供有关Send或或SendAsync操作的状操作的状态以及以及发送送请求和接收答复所用的求和接收答复所用的时间等信息。常用属等信息。常用属性有性有 1. Address属性:属性:获取取发送回送答复消息的主机地址送回送答复消息的主机地址 2. RoundtripTime属性:属性: 获取取发送消息所用的往返送消息所用的往返时间 3. Status属性:属性:获取答复的状取答复的状态,为IPStatus枚枚举类型。如果型。如果值为IPStatus.Success则代表代表Send方法方法执行成功行成功41413.2.3 Pin

35、g及其相关类(续)及其相关类(续)【例例3-4】Ping类的用法。的用法。 (书上字符串名称及上字符串名称及TextBox名称和初始化名称和初始化值含含义不明确不明确) 42423.3 网络数据编码与解码网络数据编码与解码3.3.1 Encoding类3.3.2 Encoder类和和Decoder类43433.3 网络数据编码与解码网络数据编码与解码编码:是指将一是指将一组字符字符转换为一个一个字字节序列序列的的过程。程。解解码:将一个将一个编码字字节序列序列转换为一一组字符的字符的过程。程。为什么需要什么需要编码和解和解码因因为通通过网网络传递的数据必的数据必须是是字字节序列。序列。0001

36、0011 01010010类似多音字:和 h 和睦 和谐 h 应和 和诗 h 麻将牌戏用语,意为赢 hu 和面 和泥 hu 和药 两和 常用常用编码:ASCII、Unicode、UTF8、国、国标码44443.3 网络数据编码与解码网络数据编码与解码常用常用编码1.ASCII码:每个字符均:每个字符均为7位,主要位,主要针对英文。英文。2.UNICODE码:每个字符均占两个字:每个字符均占两个字节。3.UTF码:通用:通用转换码,主要解决,主要解决编码容量容量问题,常用有,常用有(1)UTF-8:用:用1到到4个字个字节编码一个一个UNICODE字符字符 (2)UTF-16:将每个字符:将每个

37、字符编码为1至至2个个16位整数位整数组成的序列(两字成的序列(两字节) (3)UTF-32:将每个字符:将每个字符编码为一个一个32位整数(位整数(4字字节) 4.国国标码:常用有:常用有 GB2312(1980年公布)年公布) GB18030(2000年公布)年公布)4545464647473.3.1 Encoding类类Encoding类位于类位于System.Text命名空间中。常用属性及方法如下命名空间中。常用属性及方法如下:名称名称说明说明DefaultDefault属性属性获取系统的当前ANSI代码页的编码UnicodeUnicode属性属性获取使用 Little-Endian

38、字节顺序的 UTF-16 格式的编码UTF8UTF8属性属性获取UTF-8格式的编码ConvertConvert方法方法将字节数组从一种编码转换为另一种编码GetBytesGetBytes方法方法将一组字符编码为一个字节序列GetStringGetString方法方法将一个字节序列解码为一个字符串GetEncoderGetEncoder方法方法获取一个编码器,该编码器将Unicode字符序列转换为已编码的字节序列GetDecoderGetDecoder方法方法获取一个解码器,该解码器将已编码的字节序列转换为字符序列48483.3.1 Encoding类(续)类(续)1获取所有取所有编码名称及其

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

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

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

42、:明:usrcEncoding表示源表示源编码格式。格式。udstEncoding表示目表示目标编码格式。格式。ubytes参数指定了待参数指定了待转换的字的字节数数组。u将将Unicode字符串字符串转换为UTF8字符串字符串时,可参考以下的步,可参考以下的步骤进行。行。51513.3.1 Encoding类(续)类(续)将将Unicode字符串字符串转换为UTF8字符串:字符串:(1)利用)利用Encoding的的UTF8和和Unicode属性属性获取取UTF8格式的格式的编码实例例utf8和和Unicode格式的格式的编码实例例unicode,例如:,例如:string unicodeS

43、tring = 含含unicode字符字符Pi(u03a0);Encoding unicode = Encoding.Unicode;Encoding utf8 = Encoding.UTF8;(2)利用)利用unicode的的GetBytes方法将方法将Unicode字符字符编码为Unicode字字节数数组,例如:,例如:byte unicodeBytes = unicode.GetBytes(unicodeString);52523.3.1 Encoding类(续)类(续)(3)利用)利用Encoding的的Convert方法将方法将Unicode字字节数数组转换为UTF8字字节数数组,例

44、如:例如:byte utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, unicodeBytes);(4)最后,利用)最后,利用ut8的的GetString方法将方法将UTF8字字节数数组解解码为UTF8字符串字符串,例如,例如:string utf8String = utf8.GetString(utf8Bytes);53532.3.2 Encoder类和类和Decoder类类为什么使用什么使用Encoder及及Decoder类?u在网在网络传输和文件操作中,如果数据量比和文件操作中,如果数据量比较大,需要划分大,需要划

45、分为较小的小的块,此,此时可可能出能出现一个数据一个数据块的末尾是一个不匹配的高代理的末尾是一个不匹配的高代理项,而与其匹配的低代理,而与其匹配的低代理项则位于下一个数据位于下一个数据块中。中。u对于于这种情况,直接使用种情况,直接使用Encoding类的的GetBytes方法方法编写程序就比写程序就比较繁繁琐。此此时,可以利用,可以利用Encoder类轻松地解决松地解决这个个问题。54543.3.2 Encoder类和类和Decoder类(续)类(续)Encoder类Encoder类位于位于System.Text名称空名称空间下,利用它可以将一下,利用它可以将一组字符字符转换为一个一个字字节

46、序列序列。(1)获取取Encoder实例:例:利用利用GetEncoder方法方法获取取实例例/获取取ASCII编码的的Encoder实例例 Encoder asciiEncoder = Encoding.ASCII.GetEncoder();/获取取Unicode编码的的Encoder实例例Encoder unicodeEncoder = Encoding.Unicode.GetEncoder();55553.3.2 Encoder类和类和Decoder类(续)类(续)(2)GetBytes方法方法GetBytes方法将一方法将一组字符字符编码转换为字字节序列。序列。 参数参数说明:明:pu

47、blic virtual int GetBytes( char chars, /要要编码的字符数的字符数组 charIndex /第一个要第一个要编码的字符的索引的字符的索引 int charCount /要要编码的字符的数目的字符的数目 byte bytes, /存存储编码后的字后的字节序列的字序列的字节数数组 int byteIndex: /开始目的字开始目的字节序列的索引位置序列的索引位置 bool flush /是否在是否在转换后清除后清除编码器的内部状器的内部状态)56563.3.2 Encoder类和类和Decoder类(续)类(续)(3)GetByteCount方法方法Encod

48、er类提供的提供的GetByteCount方法可方法可计算算对字符序列字符序列进行行编码后所后所产生的精生的精确字确字节数,以确定字数,以确定字节数数组的的长度。度。方法原型:方法原型:public abstract int GetByteCount( char chars, /包含要包含要编码的字符集的字符数的字符集的字符数组 int index, /第一个要第一个要编码的字符的索引的字符的索引 int count, /要要编码的字符的数目的字符的数目 bool flush /是否在是否在计算后清空内部算后清空内部缓存状存状态)57573.3.2 Encoder类和类和Decoder类(续)

49、类(续)用用Decoder类解解码的步的步骤为:首先通:首先通过Encoding的的GetDecoder方法方法创建建Decoder实例,然后例,然后利用利用实例的例的GetChars方法将字方法将字节序列解序列解码。GetChars方法用于将一个字方法用于将一个字节序列解序列解码为一一组字符,并从指定的索引位置开始存字符,并从指定的索引位置开始存储这组字符。字符。该方法返回向方法返回向chars写入的写入的实际字符数。字符数。方法原型:方法原型:public abstract int GetChars( byte bytes, /包含要解包含要解码的字的字节序列的字序列的字节数数组 int

50、byteIndex, /第一个要解第一个要解码的字的字节的索引的索引 int byteCount, /要解要解码的字的字节数数 char chars, /包含所包含所产生的字符集的字符数生的字符集的字符数组 int charIndex /写入所目的字写入所目的字节数数组的索引位置的索引位置)58583.3.2 Encoder类和类和Decoder类(续)类(续)【例例3-5】利用利用Encoder类和和Decoder类实现编码和解和解码,设计界面和运行效果如界面和运行效果如图3-5所示。所示。59593.3.2 Encoder类和类和Decoder类(续)类(续)对于例于例3-5来来说,也可以

51、直接用也可以直接用Encoding实现编码解解码: string codeType = comboBoxType.Text.Substring( 0, comboBoxType.Text.IndexOf();Encoding en = Encoding.GetEncoding(codeType);/编码byte bytes = en.GetBytes(this.textBoxOldText.Text);textBoxEncoder.Text = Convert.ToBase64String(bytes);/解解码textBoxDecoder.Text = en.GetString(bytes);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号