第02章-網(wǎng)絡(luò)協(xié)議與套接字PPT課件_第1頁
第02章-網(wǎng)絡(luò)協(xié)議與套接字PPT課件_第2頁
第02章-網(wǎng)絡(luò)協(xié)議與套接字PPT課件_第3頁
第02章-網(wǎng)絡(luò)協(xié)議與套接字PPT課件_第4頁
第02章-網(wǎng)絡(luò)協(xié)議與套接字PPT課件_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章 網(wǎng)絡(luò)協(xié)議與套接字,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介 2.2 IP地址轉(zhuǎn)換與域名解析 2.3 套接字 2.4 網(wǎng)卡信息檢測(cè)與網(wǎng)絡(luò)流量檢測(cè) 2.5 字符編碼與解碼,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介,協(xié)議協(xié)議能確保網(wǎng)絡(luò)上的計(jì)算機(jī)能相互識(shí)別對(duì)方的信息。計(jì)算機(jī)的通信協(xié)議精確地定義了計(jì)算機(jī)在彼此通信過程的所有細(xì)節(jié)。例如,每臺(tái)計(jì)算機(jī)發(fā)送的信息格式和含義,在什么情況下應(yīng)發(fā)送規(guī)定的特殊信息,以及接收方的計(jì)算機(jī)應(yīng)做出哪些應(yīng)答等等。 TCP/IP是一組協(xié)議的總稱(Transmission Control Protocol/Internet Protocol) 網(wǎng)際協(xié)議(IP)對(duì)底層硬件設(shè)備進(jìn)行封裝,使之能適應(yīng)各種網(wǎng)絡(luò)硬件,確保任何

2、一個(gè)網(wǎng)絡(luò)只要可以從一個(gè)地點(diǎn)向另一個(gè)地點(diǎn)傳送二進(jìn)制數(shù)據(jù),就可以使用IP協(xié)議加入 Internet,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介(續(xù),傳輸控制協(xié)議(TCP) IP只是保證計(jì)算機(jī)之間可以發(fā)送和接收資料,但I(xiàn)P協(xié)議不能解決資料分組在傳輸過程中可能出現(xiàn)的問題。因此,計(jì)算機(jī)還需要安裝TCP協(xié)議來提供可靠的并且無差錯(cuò)的通信服務(wù)。 TCP被稱作一種端對(duì)端協(xié)議。這是因?yàn)樗鼮閮膳_(tái)計(jì)算機(jī)之間的連接起了重要作用:當(dāng)一臺(tái)計(jì)算機(jī)需要與另一臺(tái)遠(yuǎn)程計(jì)算機(jī)連接時(shí),TCP會(huì)讓它們建立一個(gè)連接、發(fā)送和接收資料以及終止連接。 TCP能夠自動(dòng)適應(yīng)網(wǎng)上的各種變化。即使在 Internet 暫時(shí)出現(xiàn)堵塞的情況下,TCP也能夠保證通信的可靠。 TC

3、P協(xié)議具有自動(dòng)調(diào)整超時(shí)值的功能,能很好地適應(yīng) Internet 上各種變化,確保傳輸數(shù)值的正確,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介(續(xù),TCP/IP模型該模型將Internet分為五個(gè)層次,從高到低依次為:應(yīng)用層、傳輸層、互聯(lián)網(wǎng)層、網(wǎng)絡(luò)接口層、物理層,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介(續(xù),1)應(yīng)用層(第5層)定義了應(yīng)用程序使用互聯(lián)網(wǎng)的規(guī)范。如簡(jiǎn)單郵件傳輸(SMTP)文件傳輸協(xié)議(FTP)網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等。 (2)傳輸層(第4層) 提供節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù),為兩個(gè)用戶進(jìn)程之間建立、管理和拆除可靠而又有效的端到端連接。包括:傳輸控制協(xié)議(TCP)用戶數(shù)據(jù)報(bào)協(xié)議(UDP,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介(續(xù),3)互連網(wǎng)

4、層(第3層) 定義了互聯(lián)網(wǎng)中傳輸?shù)摹靶畔备袷?,以及從一個(gè)用戶通過一個(gè)或多個(gè)路由器到最終目標(biāo)的信息包轉(zhuǎn)發(fā)機(jī)制。 (4)網(wǎng)絡(luò)接口層(第2層) 定義如何使用網(wǎng)絡(luò)來傳送數(shù)據(jù)。 (5)物理層(第1層) 對(duì)應(yīng)于網(wǎng)絡(luò)的基本硬件,即我們可以看得見的硬設(shè)備,如PC機(jī)、互連網(wǎng)服務(wù)器、網(wǎng)絡(luò)設(shè)備等。該層對(duì)硬設(shè)備的電氣特性作一個(gè)規(guī)范,使各設(shè)備能互相連接并兼容使用,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介(續(xù),IP地址:是給每個(gè)連接在因特網(wǎng)上的主機(jī)(或路由器)分配一個(gè)在全世界范圍內(nèi)惟一的標(biāo)識(shí)符。一個(gè)IP地址主要由兩部分組成:網(wǎng)絡(luò)地址和主機(jī)地址。 網(wǎng)絡(luò)地址由因特網(wǎng)權(quán)力機(jī)構(gòu)分配,主機(jī)地址由各個(gè)網(wǎng)絡(luò)的管理員統(tǒng)一分配。 IP地址編制方案有兩種:

5、IPV4和IPV6IPV4:二進(jìn)制表示共32位(4個(gè)字節(jié))IPV6:二進(jìn)制表示共128位(16個(gè)字節(jié)) 在IPV4編制方案中,一般使用點(diǎn)分十進(jìn)制表示法表示IP地址。例如:,2.1 網(wǎng)絡(luò)協(xié)議簡(jiǎn)介(續(xù),端口:IP地址僅僅能夠具體標(biāo)識(shí)到某臺(tái)主機(jī),而端口則表示與計(jì)算機(jī)上的哪個(gè)進(jìn)程通信。 根據(jù)IP地址找到是與哪臺(tái)機(jī)器通信,根據(jù)端口號(hào)找到是與該機(jī)器的哪個(gè)進(jìn)程通信。 (一個(gè)進(jìn)程可能會(huì)使用多個(gè)端口) 端口地址的范圍是十進(jìn)制的065535,2.2 IP地址轉(zhuǎn)換與域名解析,2.2.1 IPAddress類 提供了對(duì)IP地址的轉(zhuǎn)換、處理 2.2.2 IPEndPoint類 IP地址和端口的組合

6、 2.2.3 IPHostEntry類 將域名系統(tǒng)與一組匹配的IP地址關(guān)聯(lián)在一起。 2.2.4 Dns類 提供域名解析及其與IP地址之間的相互轉(zhuǎn)換功能,2.2.1 IPAddress類,IPAddress類(System.Net命名空間下):一般使用IPAddress的Parse方法將IP地址字符串轉(zhuǎn)換為IPAddress的實(shí)例。例如:IPAddress ip = IPAddress.Parse(“”); 屬性 Any 提供一個(gè)IPv4地址,指示服務(wù)器應(yīng)偵聽所有網(wǎng)絡(luò)接口上的客戶端活動(dòng)。(等效于) Broadcast 提供IPv4廣播地址(等效于255.255

7、.255.255) Loopback 表示IPv4回送地址(等效于) None 表示Socket不應(yīng)偵聽客戶端活動(dòng)(不使用任何網(wǎng)絡(luò)接口)。 IPv6Any 提供可用的IPv6地址 IPv6Loopback 表示IPv6回送地址 IPv6None 提供不使用任何網(wǎng)絡(luò)接口,2.2.2 IPEndPoint類,IPEndPoint類包含了連接到主機(jī)上的服務(wù)所需的IP地址和端口信息。 IPEndPoint類常用的構(gòu)造函數(shù)為: public IPEndPoint(IPAddress, int); 其中第一個(gè)參數(shù)指定IP地址,第二個(gè)參數(shù)指定端口號(hào),2.2.3 IPHostEntry類,I

8、PHostEntry類的實(shí)例對(duì)象中包含了與主機(jī)相關(guān)的信息。常用屬性有:(1)AddressList屬性:獲取或設(shè)置與主機(jī)關(guān)聯(lián)的IP地址列表,是一個(gè)IPAddress類型的數(shù)組,包含了指定主機(jī)的所有IP地址; (2)HostName屬性:包含了服務(wù)器的主機(jī)名。 在Dns類中,有一個(gè)專門獲取IPHostEntry對(duì)象的方法。 例如:IPAddress ips = Dns.GetHostEntry(“http:/).AddressList,2.2.4 Dns類,DNS(Domain Name System,域名系統(tǒng))提供了一系列靜態(tài)的方法,用于獲取提供本地或遠(yuǎn)程域名等功能,常用方法有: (1)Get

9、HostAddresses方法 獲取指定主機(jī)的IP地址,返回一個(gè)IPAddress類型的數(shù)組。格式為: public static IPAddress GetHostAddresses(string hostNameOrAddress); 例如:IPAddress ips=Dns.GetHostAddresses(); 注意:如果hostNameOrAddress是IP地址,則不查詢DNS服務(wù)器,直接返回此地址,2.2.4 Dns類(續(xù),2)GetHostEntry方法 在DNS服務(wù)器中查詢與某個(gè)主機(jī)名或IP地址關(guān)聯(lián)的IP地址。 當(dāng)參數(shù)為空字符串時(shí),此方法返回本地主機(jī)的IPv4地址和主機(jī)名。

10、例如: IPHostEntry host = Dns.GetHostEntry(); listBox1.Items.AddRange(host.AddressList); /本機(jī)所有IPv4地址 listBox1.Items.Add(host.HostName); /本機(jī)主機(jī)名 (3) GetHostName方法 獲取本機(jī)主機(jī)名。 例如:string hostname = Dns.GetHostName(,2.2.4 Dns類(續(xù),例 2-1】IPAddress類、Dns類、IPHostEntry類和IPEndPoint類的使用方法,2.3 套接字,套接字是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本

11、操作單元??梢詫⑻捉幼挚醋鞑煌鳈C(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),它構(gòu)成了單個(gè)主機(jī)內(nèi)及整個(gè)網(wǎng)絡(luò)間的編程界面。套接字通常和同一個(gè)域中的套接字交換數(shù)據(jù),各種進(jìn)程使用這個(gè)相同的域互相之間用Internet協(xié)議進(jìn)行通信。 用C#編寫符合標(biāo)準(zhǔn)的網(wǎng)絡(luò)應(yīng)用程序時(shí),應(yīng)該盡可能使用TcpListener類、TcpClient類、UDPClient類或其它對(duì)應(yīng)類。而不是直接用Socket類。 用C#編寫非標(biāo)準(zhǔn)的網(wǎng)絡(luò)應(yīng)用程序時(shí),只能使用Socket類,2.3.1 同步套接字與異步套接字,套接字的類型有: 流式套接字:提供了面向連接的、可靠的、數(shù)據(jù)無錯(cuò)并且無重復(fù)的數(shù)據(jù)發(fā)送服務(wù),而且接收數(shù)據(jù)的順序和發(fā)送數(shù)據(jù)的順序是相同的。

12、 數(shù)據(jù)報(bào)套接字:提供了面向無連接的服務(wù),它以獨(dú)立的數(shù)據(jù)包形式發(fā)送數(shù)據(jù)(數(shù)據(jù)包長(zhǎng)度不能大于32KB),不提供正確性檢查,也不保證各數(shù)據(jù)包的發(fā)送順序和接收順序相同 ,因此,可能出現(xiàn)數(shù)據(jù)的重發(fā)、丟失等現(xiàn)象。 原始套接字:用于直接訪問協(xié)議的較低層。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問現(xiàn)有服務(wù)中配置的新設(shè)備,一般不提倡直接使用原始套接字,2.3.1 同步套接字與異步套接字(續(xù),使用套接字處理數(shù)據(jù)有兩種基本模式: 同步套接字:在通過Socket進(jìn)行連接、接收、發(fā)送操作時(shí),客戶機(jī)或服務(wù)器在接受對(duì)方響應(yīng)前會(huì)處于阻塞狀態(tài),即一直等到接受對(duì)方請(qǐng)求后才繼續(xù)執(zhí)行下面的語句。同步套接字適用于對(duì)數(shù)據(jù)處理用時(shí)不多的場(chǎng)合。 異步套接

13、字:通過Socket進(jìn)行連接、接收或發(fā)送操作時(shí),客戶端或服務(wù)器不會(huì)處于阻塞方式,而是利用callback機(jī)制進(jìn)行連接、接收以及發(fā)送處理,這樣就可以在調(diào)用發(fā)送或接收的方法后直接返回,并繼續(xù)執(zhí)行下面的語句。異步套接字適用于進(jìn)行大量數(shù)據(jù)處理或者用時(shí)較多的場(chǎng)合,2.3.2 Socket類,Socket類包含在System.Net.Sockets命名空間中。 一個(gè)Socket實(shí)例包含了一個(gè)本地或者一個(gè)遠(yuǎn)程端點(diǎn)的套接字信息。 使用Socket類編程,由于很多細(xì)節(jié)都需要自己考慮,相對(duì)來說復(fù)雜一些,易出錯(cuò)。一般對(duì)套接字編程比較熟悉的人,或者使用非標(biāo)準(zhǔn)協(xié)議(自定義的新協(xié)議)進(jìn)行編程的時(shí)候,才使用Socket類。

14、 Socket類的構(gòu)造函數(shù)為: public Socket( AddressFamily addressFamily, /網(wǎng)絡(luò)類型 SocketType socketType, /套接字類型 ProtocolType protocolType); /使用的協(xié)議,2.3.2 Socket類(續(xù),Socket構(gòu)造函數(shù)的三個(gè)參數(shù)中,對(duì)于網(wǎng)絡(luò)上的IP通信來說,AddressFamily總是使用AddressFamily.InterNetwork枚舉值。而SocketType參數(shù)則與ProtocolType參數(shù)配合使用,不允許其他的匹配形式,也不允許混淆匹配。下表列出了可用于IP通信的組合,2.3.3

15、面向連接的套接字編程,2.3.3 面向連接的套接字編程(續(xù),服務(wù)器端部分代碼舉例: IPHostEntry local = Dns.GetHostByName(Dns.GetHostName(); IPEndPoint iep = new IPEndPoint(local.AddressList0, 1180); Socket localSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); localSocket.Bind(iep); locatSocket.Listen(1

16、0); Socket clientSocket = localSocket.Accept(,2.3.3 面向連接的套接字編程(續(xù),客戶端部分代碼舉例: IPAddress remoteHost = IPAddress.Parse(); PEndPoint iep = new IPEndPoint(remoteHost, 1180); Socket localSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); localSocket.Connect(ie

17、p); 關(guān)閉連接的典型用法: sock.Shutdown(SocketShutdown.Both); sock.Close(,2.3.4 無連接的套接字編程,2.3.5 對(duì)套接字封裝后的類,TcpClient類和TcpListener類 TcpClient類是與TCP客戶端相關(guān)的類,而TcpListener則用于在服務(wù)器端監(jiān)聽(Listen)客戶端傳來的連接請(qǐng)求。 兩個(gè)類均對(duì)流式套接字進(jìn)行了封裝,簡(jiǎn)化了編程難度。 傳輸?shù)臄?shù)據(jù)可以使用.NET Framework中的流處理技術(shù)進(jìn)行讀寫。 UdpClient類 對(duì)數(shù)據(jù)報(bào)套接字進(jìn)行了封裝 該類使用UdpClient類的Send方法向網(wǎng)絡(luò)發(fā)送數(shù)據(jù),使用

18、Receive方法接收傳入的數(shù)據(jù)文報(bào),2.4 網(wǎng)卡信息檢測(cè)與網(wǎng)絡(luò)流量檢測(cè),System.Net.NetworkInformation命名空間提供了: 對(duì)本機(jī)網(wǎng)卡相關(guān)信息的檢測(cè)比如本機(jī)有多少網(wǎng)卡,網(wǎng)卡名稱、速度、硬件地址等。 對(duì)本機(jī)網(wǎng)絡(luò)流量的檢測(cè)比如網(wǎng)絡(luò)連接配置、接收與發(fā)送的數(shù)據(jù)包等。 Ping類檢測(cè)本機(jī)是否可訪問網(wǎng)絡(luò)上的其它計(jì)算機(jī)。 這些類在高級(jí)網(wǎng)絡(luò)信息處理中很有用,2.4.1 獲取網(wǎng)卡信息,NetworkInterface類NetworkInterface類提供了網(wǎng)絡(luò)適配器的配置和統(tǒng)計(jì)信息??梢岳眠@個(gè)類檢測(cè)本機(jī)有多少個(gè)網(wǎng)絡(luò)適配器、網(wǎng)絡(luò)適配器型號(hào)以及網(wǎng)絡(luò)適配器的速度等。 IPInterfac

19、eProperties類可以利用這個(gè)類檢測(cè)本機(jī)所有網(wǎng)絡(luò)適配器支持的各種地址 PhysicalAddress類提供了網(wǎng)絡(luò)適配器的媒體訪問控制(MAC)地址,2.4.1 獲取網(wǎng)卡信息(續(xù),NetworkInterface類常用的屬性和方法,2.4.1 獲取網(wǎng)卡信息(續(xù),IPInterfaceProperties類(抽象類)常用的屬性和方法,2.4.1 獲取網(wǎng)卡信息(續(xù),例2-2】獲取本機(jī)網(wǎng)絡(luò)適配器的個(gè)數(shù)、型號(hào)、速度、MAC地址以及DNS服務(wù)器信息,2.4.2 獲取網(wǎng)絡(luò)流量信息,IPGlobalProperties類 提供本地計(jì)算機(jī)網(wǎng)絡(luò)連接相關(guān)的信息。例如網(wǎng)絡(luò)連接配置、接收與發(fā)送的數(shù)據(jù)包等。 一般用

20、法: using System; using System.Net.NetworkInformation; IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); IPGlobalStatistics ipstat = properties.GetIPv4GlobalStatistics(); listBox1.Items.Add(接收數(shù)據(jù)包數(shù): + ipstat.ReceivedPackets); listBox1.Items.Add(轉(zhuǎn)發(fā)數(shù)據(jù)包數(shù): + ipstat.ReceivedPacket

21、sForwarded); listBox1.Items.Add(傳送數(shù)據(jù)包數(shù): + ipstat.ReceivedPacketsDelivered); listBox1.Items.Add(丟棄數(shù)據(jù)包數(shù): + ipstat.ReceivedPacketsDiscarded,2.4.2 獲取網(wǎng)絡(luò)流量信息(續(xù),TcpConnectionInformation類提供有關(guān)本地計(jì)算機(jī)上的傳輸控制協(xié)議(TCP)連接的信息。 IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); TcpConnectionInf

22、ormation connections = properties.GetActiveTcpConnections(); foreach (TcpConnectionInformation t in connections) string str = ; str += Local endpoint: + t.LocalEndPoint.Address; str += , Remote endpoint: + t.RemoteEndPoint.Address; str += , + t.State; listBox1.Items.Add(str);,2.4.2 獲取網(wǎng)絡(luò)流量信息(續(xù),例2-3】檢

23、測(cè)本機(jī)網(wǎng)絡(luò)流量以及TCP連接信息,2.4.3 Ping類,可以使用Ping類檢測(cè)本機(jī)是否可訪問網(wǎng)絡(luò)上的其它計(jì)算機(jī)。類似于Ping.exe命令行工具。 該類提供的Send和SendAsync方法將Internet控制消息協(xié)議(ICMP)回送請(qǐng)求消息發(fā)送到遠(yuǎn)程計(jì)算機(jī)并等待來自該計(jì)算機(jī)的ICMP回送答復(fù)消息。 與Ping類一起使用的類型有: IPStatus枚舉:定義描述 ICMP 回送請(qǐng)求消息結(jié)果的狀態(tài)代碼 PingOptions類:控制如何傳輸 Ping 數(shù)據(jù)包(見下頁) PingReply類:提供有關(guān) Send 或 SendAsync 操作的狀態(tài)及產(chǎn)生的數(shù)據(jù)的信息,2.4.3 Ping類(續(xù),

24、PingOptions類:控制如何傳輸 Ping 數(shù)據(jù)包。與此類相關(guān)的屬性有: Ttl 屬性為 Ping 類發(fā)送的數(shù)據(jù)包指定生存時(shí)間。此值指示在丟棄 Ping 數(shù)據(jù)包之前可以轉(zhuǎn)發(fā)此數(shù)據(jù)包的路由節(jié)點(diǎn)數(shù)。如果要測(cè)試將數(shù)據(jù)包從源計(jì)算機(jī)發(fā)送到目標(biāo)計(jì)算機(jī)所需的轉(zhuǎn)發(fā)數(shù)(也稱為躍點(diǎn)),設(shè)置此選項(xiàng)很有用。 DontFragment 屬性控制是否可將發(fā)送到遠(yuǎn)程主機(jī)的數(shù)據(jù)分成多個(gè)數(shù)據(jù)包。如果要測(cè)試用于傳輸數(shù)據(jù)包的路由器和網(wǎng)關(guān)的最大傳輸單元 (MTU),此選項(xiàng)很有用,2.4.3 Ping類(續(xù),用法 string ipString = ; Ping pingSender = new Ping();

25、 PingOptions options = new PingOptions(); options.DontFragment = true; string data = 12345678901234567890; byte buffer = Encoding.ASCII.GetBytes(data); int timeout = 120; PingReply reply = pingSender.Send(ipString, timeout, buffer, options); if (reply.Status = IPStatus.Success) listBox1.Items.Add(Ad

26、dress: + reply.Address.ToString(); listBox1.Items.Add(RoundTrip time: + reply.RoundtripTime); listBox1.Items.Add(Time to live: + reply.Options.Ttl); listBox1.Items.Add(Buffer size: + reply.Buffer.Length);,2.4.3 Ping類(續(xù),例2-4】Ping類的用法,2.5 字符編碼與解碼,編碼:是指將一組字符轉(zhuǎn)換為一個(gè)字節(jié)序列的過程。 解碼:將一個(gè)編碼字節(jié)序列轉(zhuǎn)換為一組字符的過程。 為什么需要編碼

27、和解碼因?yàn)橥ㄟ^網(wǎng)絡(luò)傳遞的數(shù)據(jù)必須是字節(jié)序列。 常用編碼 ASCII碼:每個(gè)字符均為7位,主要針對(duì)英文。 UNICODE碼:每個(gè)字符均占兩個(gè)字節(jié)。 UTF碼:通用轉(zhuǎn)換碼,主要解決編碼容量問題,常用有(1)UTF-8:用1到4個(gè)字節(jié)編碼一個(gè)UNICODE字符 (2)UTF-16:將每個(gè)字符編碼為1至2個(gè)16位整數(shù)組成的序列 (3)UTF-32:將每個(gè)字符編碼為一個(gè)32位整數(shù) 國(guó)標(biāo)碼:常用有 GB2312(1980年公布,提供65535個(gè)漢字) GB18030(2000年公布,提供27484個(gè)漢字,2.5.1 Encoding類,Encoding類位于System.Text命名空間中,2.5.1 E

28、ncoding類(續(xù),用法舉例: Encoding GB2312 = Encoding.GetEncoding(GB2312); Encoding GB18030 = Encoding.GetEncoding(GB18030); /將Unicode字符串轉(zhuǎn)換為UTF8字符串: string unicodeString = 該字符串包含unicode字符Pi(u03a0); Encoding utf8 = Encoding.UTF8; Encoding unicode = Encoding.Unicode; / 將字符串轉(zhuǎn)換為字節(jié)數(shù)組 byte unicodeBytes = unicode.Ge

29、tBytes(unicodeString); / 將unicode字節(jié)數(shù)組轉(zhuǎn)換為utf8字節(jié)數(shù)組 byte utf8Bytes = Encoding.Convert(Encoding.Unicode,Encoding.UTF8, unicodeBytes); /將字節(jié)數(shù)組轉(zhuǎn)換為字符串 string utf8String = Encoding.UTF8.GetString(utf8Bytes,2.5.2 Encoder類和Decoder類,Encoder類:將一組字符轉(zhuǎn)換為一個(gè)字節(jié)序列。舉例: Char chars = new Char u0023, / # u0025, / % u03a0, / Pi u03a3 / Sigma ; /顯示原始Unicode字符串 listBox1.Items.Add(new string(chars); Encoder encoder = Encoding.UTF8.GetEncoder(); Byte bytes = new Byteencoder.GetByteCount( chars, 0, chars.Length, true); encoder

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論