C#套接字編程_第1頁
C#套接字編程_第2頁
C#套接字編程_第3頁
C#套接字編程_第4頁
C#套接字編程_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第六章C#套接字編程主要內(nèi)容.NET 網(wǎng)絡(luò)編程基本操作同步通信開發(fā) 同步服務(wù)器開發(fā) 同步客戶機(jī)開發(fā)異步通信開發(fā) 異步服務(wù)器開發(fā) 異步客戶機(jī)開發(fā)TcpListener/TcpClient 通信開發(fā)UDP通信1.概述.NET 環(huán)境下的網(wǎng)絡(luò)編程仍然是基于套接字的編程。套接字編程接口使用了 System.Net.Sockets名字空間。其提供的Socket類為Win32下的套接字的托管版本。.NET 網(wǎng)絡(luò)編程提供了很多支持:Socket;TcpClient/UdpClient/TcpListener;WebRequest/WebResponse;HTTP/FTP/File+ WebRequest/We

2、bResponse等。.NET與Win32套接字對比.NetWin32Accept/BeginAccept/EndAcceptacceptBindbindCloseclosesockListenlistenSelectselectConnect/BeginConnect/EndConnectconnectGetSocketOption/SetSocketOptiongetsockopt/setsockoptReceive/BeginReceive/EndReceiverecvSend/BeginSend/EndSendsendReceiveFrom/BeginReceiveFrom/EndRe

3、ceiveFromrecvfromSendTo/BeginSendTo/EndSendTosendtoShutdownshutdown.NET網(wǎng)絡(luò)中常用的類Socket:實(shí)現(xiàn) Berkeley 套接字接口;Dns:提供簡單的域名解析功能;IPAddress:提供網(wǎng)際協(xié)議 (IP) 地址;IPEndPoint:將網(wǎng)絡(luò)端點(diǎn)表示為 IP 地址和端口號;IPHostEntry:為 Internet 主機(jī)地址信息提供容器類;NetworkStream:提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流。TcpLinster:從 TCP 網(wǎng)絡(luò)客戶端偵聽連接。TcpClient:為 TCP 網(wǎng)絡(luò)服務(wù)提供客戶端連接UdpClien

4、t:提供用戶數(shù)據(jù)報(bào) (UDP) 網(wǎng)絡(luò)服務(wù)1.1 .NET套接字概述名字空間:System.Net.Sockets.Socket,System.Net 命名空間中的所有其他網(wǎng)絡(luò)訪問類都建立在該套接字實(shí)現(xiàn)的基礎(chǔ)之上。Socket 類支持兩種基本模式: 同步:對執(zhí)行網(wǎng)絡(luò)操作的函數(shù)(如 Send 和Receive)的調(diào)用一直等到操作完成后才將控制返回給調(diào)用程序。 異步:網(wǎng)絡(luò)操作的函數(shù)調(diào)用立即返回。1.2 .NET套接字構(gòu)造Socket 的構(gòu)造函數(shù)原型: 參數(shù)1:指定 Socket 類用來解析網(wǎng)絡(luò)地址的標(biāo)準(zhǔn)址族(如:AddressFamily.InterNetwork 成員指定IP 版本 4 地址族)。

5、 參數(shù)2:指定套接字的類型(如:SocketType.Stream 成員表示一個用于發(fā)送和接收數(shù)據(jù)并且支持流控制的標(biāo)準(zhǔn)套接字)。 參數(shù)3:指定在 Socket 上通信時(shí)使用的網(wǎng)絡(luò)協(xié)議(如:ProtocolType.Tcp 指示套接字使用 TCP)。1.2.1 TCP/UDP套接字構(gòu)造構(gòu)造TCP套接字構(gòu)造UDP套接字套接字的常用屬性Socket 常用屬性:Blocking:設(shè)置或者獲取套接字阻塞模式;Connected:獲取當(dāng)前套接字是否與遠(yuǎn)程主機(jī)相連;LocalEndPoint:得到套接字的本地 EndPoint 對象;RemoteEndPoint:得到套接字的遠(yuǎn)程 EndPoint 對象;S

6、ocketType:套接字類型。套接字的常用方法Socket 常用同步的方法: Accept; Bind; Close; Connect; Disconnect; Listen; Receive/ReciveFrom; Select; Send/SendTo/SendFile; SetSocketOption/GetSocketOption; Shutdown;說明:紅色的方法有對應(yīng)的異步方法。1.2.2 使用套接字創(chuàng)建套接字后: 在客戶端,通過Connect方法連接到指定的服務(wù)器,并通過Send/SendTo或者Receive/ReceiveFrom從服務(wù)端接收數(shù)據(jù); 在服務(wù)器端,使用Bin

7、d方法綁定所指定的接口使Socket與一個本地終結(jié)點(diǎn)相聯(lián),并通過Listen方法偵聽該接口上的請求,當(dāng)偵聽到用戶端的連接時(shí),調(diào)用Accept完成連接的操作,創(chuàng)建新的Socket以處理傳入的連接請求。 使用完 Socket 后,使用 Shutdown 方法結(jié)束通信,并使用 Close 方法關(guān)閉 Socket。上面的是同步方式的通信,還有相對應(yīng)的異步的Begin/End連接與通信方式。1.2.3 Bind方法套接字服務(wù)器的綁定端點(diǎn)需要使用到Socket.Bind() 方法。在調(diào)用 Bind 之前,必先創(chuàng)建本地IPEndPoint。可以用 IPAddress.Any 作為地址參數(shù)創(chuàng)建一個 IPEnd

8、Point,這樣,將會使用所有可能的網(wǎng)絡(luò)地址。通過調(diào)用 LocalEndPoint 獲知所分配的本地網(wǎng)絡(luò)地址和端口號。1.2.4 Listen 方法Socket.Listen() 將套接字置于監(jiān)聽狀態(tài)。 backlog 掛起連接隊(duì)列的最大長度。1.2.5 SetSocketOption設(shè)置或者取消套接字的對應(yīng)的屬性。 參數(shù)1:可以是Socket, IP, TCP, UDP; 參數(shù)2:各種與參數(shù)1對應(yīng)的屬性,如:Broadcast,RecevieBuffer, ReceiveTimeout等待。 參數(shù)3:true/false。true使能;false取消。1.3 地址/端口信息TCP/IP 使用

9、一個網(wǎng)絡(luò)地址和一個服務(wù)端口號來唯一標(biāo)識設(shè)備。 網(wǎng)絡(luò)地址標(biāo)識網(wǎng)絡(luò)上的特定設(shè)備; 端口號標(biāo)識要連接到的該設(shè)備上的特定服務(wù)。網(wǎng)絡(luò)地址和服務(wù)端口的組合稱為網(wǎng)絡(luò)端點(diǎn),它在 .NET中由 EndPoint 類表示。對于 IP 地址族,該類為 IPEndPoint。1.3.1 IPEndPoint 使用構(gòu)造函數(shù)兩種:其IPEndPoint的使用問題:在 Win32 中記錄IP地址和端口信息是使用的什么?1.3.2 地址處理IPAddress 在 System.Net名字空間中。它包含計(jì)算機(jī)在 IP 網(wǎng)絡(luò)上的地址相關(guān)操作和屬性。根據(jù)字符串獲取IPAddress信息: Parse ();提供的常用地址:Any;

10、Broadcast;Loopback;None;1.3.3 主機(jī)解析Dns 類是一個靜態(tài)類,它從域名系統(tǒng)中檢索關(guān)于特定主機(jī)的信息。IPHostEntry 類將主機(jī)名、別名和一組匹配的IP 地址關(guān)聯(lián)。常和Dns類一起使用。在 IPHostEntry 類的實(shí)例中返回來自 DNS 查詢的主機(jī)信息。如果指定的主機(jī)在 DNS 數(shù)據(jù)庫中有多個入口,則 IPHostEntry 包含多個 IP地址和別名。問題:在 Win32 中記錄地址和機(jī)器名信息是使用的什么?1.3.4 主機(jī)解析用法Dns.Resove用于解析主機(jī)名到 IPHostEntry。使用:1.3.5 Dns類常用方法GetHostName()可以

11、獲得主機(jī)名。GetHostByName() 方法根據(jù)主機(jī)名向DNS服務(wù)器查詢主機(jī)信息。GetHostByAddress() 方法根據(jù)地址信息查詢主機(jī)信息。1.3.6 示例1地址信息1.3.7 示例2構(gòu)造服務(wù)器Win32如何創(chuàng)建并綁定一個服務(wù)器套接字的?1.4 出錯/異常信息SocketException 用來拋出Socket相關(guān)異常信息。當(dāng)網(wǎng)絡(luò)發(fā)生錯誤時(shí),Socket 和 Dns 引發(fā)SocketException。使用 SocketException.ErrorCode 可以獲取特定的錯誤代碼, Message 可以獲得錯誤消息。2. 同步服務(wù)器/客戶機(jī)討論一種常見網(wǎng)絡(luò)服務(wù)器模式: 同步阻塞

12、服務(wù)器; 同步阻塞客戶機(jī);和Win32下的阻塞模型類似,對每一個接受的請求產(chǎn)生新的線程,并在此線程中完成所有的與客戶機(jī)的數(shù)據(jù)交互。2.1 同步阻塞服務(wù)器開發(fā)這是使用起來最簡單的一種模型。任何時(shí)候調(diào)用一個綁定I/O的.NET套接字方法,如果套接字上沒有等候處理的數(shù)據(jù),該調(diào)用就會阻塞。如果需要做其他的事情,或者為其它的連接請求提供服務(wù),就需要在應(yīng)用程序中創(chuàng)建額外的線程。和Win32下的阻塞模型類似。同步阻塞模型2.1.1 同步Accept其函數(shù)定義:Accept 以同步方式從偵聽套接字的連接請求隊(duì)列中提取第一個掛起的連接請求,然后創(chuàng)建并返回新的 Socket。此處使用 Socket.RemoteE

13、ndPoint來獲取連接機(jī)器的IP和端口信息。問題:Win32 中何處獲取請求連接機(jī)器的地址和端口信息?同步Accept 接受連接在阻止模式中,Accept 將一直處于阻止?fàn)顟B(tài),直到傳入的連接嘗試排入隊(duì)列。連接被接受后,原來的 Socket 繼續(xù)將傳入的連接請求排入隊(duì)列,直到您關(guān)閉它。2.1.2 同步Send發(fā)送數(shù)據(jù)將數(shù)據(jù)發(fā)送到連接的 Socket:SocketFlags 通常使用SocketFlags.None,發(fā)送字節(jié)數(shù)的默認(rèn)值為緩沖區(qū)的大小。Send 對面向連接的協(xié)議和無連接協(xié)議均適用。同步Send注意事項(xiàng)如果您使用的是面向連接的協(xié)議,則除非使用Socket.SendTimeout 設(shè)置

14、了超時(shí)值,否則,Send 將一直處于阻止?fàn)顟B(tài),直到發(fā)送完緩沖區(qū)中的所有字節(jié)。應(yīng)由應(yīng)用程序負(fù)責(zé)跟蹤已發(fā)送的字節(jié)數(shù)并重試操作,直到應(yīng)用程序發(fā)送完想要發(fā)送的緩沖區(qū)中的字節(jié)數(shù)為止。不能保證發(fā)送的數(shù)據(jù)會立即出現(xiàn)在網(wǎng)絡(luò)上。為提高網(wǎng)絡(luò)效率,基礎(chǔ)系統(tǒng)可能會延遲傳輸,直到收集了足夠多的傳出數(shù)據(jù)后才開始發(fā)送。2.1.3 同步Receive發(fā)送數(shù)據(jù)從Socket中接收數(shù)據(jù)(常用第3個):Receive 方法將數(shù)據(jù)讀入第一個參數(shù)中,并返回成功讀取的字節(jié)數(shù)。第一個int是接收多少數(shù)據(jù)到緩沖區(qū),第二個int是指明緩沖區(qū)的偏移量。如果沒有可讀取的數(shù)據(jù),則 Receive 方法將一直處于阻止?fàn)顟B(tài),直到數(shù)據(jù)可用,除非使用Rec

15、eiveTimeout 設(shè)置了超時(shí)值。如果超過超時(shí)值,Receive 調(diào)用將引發(fā) SocketException。同步Send/Receive示例2.1.4 另一種方式收發(fā)數(shù)據(jù)System.Net.Sockets.NetworkStream 提供了用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流。NetworkStream 提供的 Write 和 Read方法用于簡單的單線程同步阻止 I/O。另外NetworkStream還提供異步的發(fā)送和接收數(shù)據(jù)的方法: BeginWrite/EndWrite BeginRead/EndReadWrite發(fā)送數(shù)據(jù)Write 函數(shù)定義: 參數(shù)1:byte數(shù)組,包含即將寫入到Netwo

16、rkStream的數(shù)據(jù)。 參數(shù)2:buffer中開始寫入數(shù)據(jù)的位置。 參數(shù)3:準(zhǔn)備寫入NetworkStream的字節(jié)數(shù)。Read接收數(shù)據(jù)函數(shù)定義: 參數(shù)1:用于存儲從 NetworkStream 讀取的數(shù)據(jù)。 參數(shù)2:buffer中的開始存放數(shù)據(jù)的偏移量。 參數(shù)3:buffer長度。 返回值:成功讀取的字節(jié)數(shù)。Write/Read示例2.2 同步客戶機(jī)客戶機(jī)需要通過三次握手完成到服務(wù)器的連接。.NET 環(huán)境提供了同步 Connect 函數(shù)完成到服務(wù)器的連接。TCP 連接中Connect 方法會同步建立LocalEndPoint 與指定遠(yuǎn)程終結(jié)點(diǎn)之間的網(wǎng)絡(luò)連接,同時(shí)保存本地地址和端口信息。遠(yuǎn)程

17、結(jié)點(diǎn)的信息存放在Socket.RemoteEndPoint 中??蛻魴C(jī)與服務(wù)器的通信也是使用Send/Receive或 NetworkStream 的 Read/Write 完成。2.2.1 客戶機(jī) Connect.NET環(huán)境下常使用的Connect原型有:其中后面兩個為 .NET 2.0 新增。使用示例:2.3 服務(wù)器/客戶機(jī)示例服務(wù)器(多線程同步阻塞服務(wù)器,為每一個客戶新建一個線程來處理): FirstNetwork.csproj客戶機(jī): ClientNetwork.csproj3. 異步服務(wù)器/客戶機(jī)在.NET 套接字中,異步模型是用在一個或者多個套接字上管理 I/O 的最佳途徑。因?yàn)楫?/p>

18、步模型采用的和 Win32 下的完成端口模型類似,而且在 NT 系統(tǒng)中,其內(nèi)部實(shí)現(xiàn)上使用了完成端口 I/O 模型,因此是最有效率的一種?;貞洠篧in32 下有那些 I/O 模型?服務(wù)器為Pentinum41.7G Xeon,內(nèi)存 768M,100M網(wǎng)絡(luò),系統(tǒng)WinXP3.1 普通程序異步執(zhí)行C# 有多種常用的異步調(diào)用步驟,其中有兩種分別是: 進(jìn)行某些操作,然后調(diào)用 EndInvoke 一直阻塞到調(diào)用完成。 將用于回調(diào)方法的委托傳遞給 BeginInvoke。該方法在異步調(diào)用完成后在 ThreadPool 線程上執(zhí)行,它可以調(diào)用 EndInvoke。代碼:Asyn-1.cs Asyn-4.cs3

19、.2 網(wǎng)絡(luò)相關(guān)異步方法前面提到幾種用來異步處理的 I/O 方法:BeginAccept/EndAccept;BeginConnect/EndConnect;BeginReceive/EndReceive;BeginSend/EndSend;BeginReciveFrom/EndReceiveFrom;BeginSendTo/EndSendTo;都是有Accept、Connect、Receive、Send等都是增加了一對 BeginXXX/EndXXX3.3 異步方法的工作機(jī)制異步套接字使用系統(tǒng)線程池中的線程處理傳入的連接。一些線程負(fù)責(zé)接受連接,另一些線程用于處理每個傳入的連接,還有一些線程負(fù)責(zé)

20、接收連接數(shù)據(jù)。這些線程可以是同一個線程,具體取決于線程池所分配的線程。System.Threading.ManualResetEvent 類掛起主線程的執(zhí)行并在執(zhí)行可以繼續(xù)時(shí)發(fā)出信號。3.4 性能改善異步調(diào)用的執(zhí)行上下文(安全上下文、模擬用戶及調(diào)用上下文)會被 .NET 環(huán)境緩存,以用于 Socket 異步方法。在首次使用一個特定上下文(特定Socket 異步方法、特定 Socket 實(shí)例及特定回調(diào))后,該上下文的后續(xù)使用將得到性能改善。3.5 異步方法的使用要異步調(diào)用一個 I/O 方法,必須調(diào)用與同步方法中對應(yīng)的方法 “BeginXXX”,并在它的調(diào)用中提供一個回調(diào)方法。BeginXXX 調(diào)

21、用完成后,調(diào)用線程可以繼續(xù)做其它事情,而提供的回調(diào)方法則會去處理 I/O讀寫。在回調(diào)方法內(nèi)部,當(dāng) Socket 完成 I/O 操作后,可以使用對等的 EndXXX 來獲取完成的 I/O果。3.6 IAsyncResult 接口IAsyncResult 接口由包含可異步操作的方法的類實(shí)現(xiàn)。它是啟動異步操作的方法的返回類型,如BeginAccept,也是結(jié)束異步操作的方法的參數(shù)的類型,如 EndAccept。IAsyncResult 也將傳遞給由 AsyncCallback 委托調(diào)用的方法。它的 AsyncState 屬性能夠獲取用戶定義的對象,就是在 BeginXXX 中傳入的Object 對象

22、。3.7 常用異步方法AcceptBeginAccept/EndAccept原型: AsynCallback:指明回調(diào)方法,異步執(zhí)行體; Object:一個包含此請求的狀態(tài)信息的對象; IAsynResult:存儲此異步操作的狀態(tài)信息以及任何用戶定義數(shù)據(jù)。 EndAccept:返回連接客戶機(jī)的套接字。3.7.1 異步Accept為開始接受網(wǎng)絡(luò)連接請求,其步驟如下:1) 初始化 Socket,并完成綁定和監(jiān)聽。2) 使用 BeginAccept 方法開始接受新連接。3) 當(dāng)套接字上接收到新連接請求時(shí),將調(diào)用接受回調(diào)方法。4) 回調(diào)方法通過 EndAccept 來獲取處理客戶機(jī)連接請求的 Sock

23、et 句柄,并將該 Socket 提交給將處理請求的線程?;卣{(diào)方法實(shí)現(xiàn) AsyncCallback委托;它返回 void,并帶一個 IAsyncResult 類型的參數(shù)。3.8 常用異步方法Send將數(shù)據(jù)異步的發(fā)送到連接的Socket。BeginSend/EndSend原型:常用異步方法Send參數(shù)說明:buffer:存放發(fā)送數(shù)據(jù)的緩沖區(qū);offset:緩沖區(qū)中準(zhǔn)備發(fā)送的數(shù)據(jù)的開始處;size:發(fā)送數(shù)據(jù)的長度;sockFlags:Socket相關(guān)標(biāo)識,常用 0;callback:指明回調(diào)方法;state:一個包含此請求的狀態(tài)信息的對象;IAsynResult:存儲此異步操作的狀態(tài)信息;EndS

24、end:返回成功發(fā)送的數(shù)據(jù)長度。BeginSendBeginSend 方法可對在 Connect、BeginConnect、Accept 或 BeginAccept 方法中建立的遠(yuǎn)程主機(jī)啟動異步發(fā)送操作。如果沒有首先調(diào)用 Accept、BeginAccept、Connect 或 BeginConnect,則 BeginSend 將會引發(fā)異常。調(diào)用 BeginSend 方法將使您能夠在單獨(dú)的執(zhí)行線程中發(fā)送數(shù)據(jù)?;卣{(diào)方法AsyncCallback創(chuàng)建一個實(shí)現(xiàn) AsyncCallback 委托的回調(diào)方法并將它的名稱傳遞給 BeginSend 方法。因此,state 參數(shù)至少必須包含用于通信的已連接或

25、默認(rèn) Socket。如果回調(diào)需要更多信息,則可以創(chuàng)建一個小型類或結(jié)構(gòu),用于保存Socket 和其他所需的信息。通過 state 參數(shù)將此類的一個實(shí)例傳遞給 BeginSend 方法。EndSend回調(diào)方法應(yīng)調(diào)用 EndSend 方法。當(dāng)應(yīng)用程序調(diào)用 BeginSend 時(shí),系統(tǒng)將使用一個單獨(dú)的線程來執(zhí)行指定的回調(diào)方法,并阻止 EndSend,直到 Socket 發(fā)送了請求的字節(jié)數(shù)或引發(fā)了異常為止。如果希望在調(diào)用 BeginSend 方法之后使原始線程阻止,請使用 WaitHandle.WaitOne 方法。當(dāng)需要原始線程繼續(xù)執(zhí)行時(shí),請?jiān)诨卣{(diào)方法中調(diào)用 System.Threading.Manu

26、alResetEvent的 Set 方法。3.9 常用異步方法ReceiveBeginReceive/EndReceive原型:常用異步方法Receive參數(shù)說明:buffer:存放接收數(shù)據(jù)的緩沖區(qū);offset:緩沖區(qū)中準(zhǔn)備接收的數(shù)據(jù)的開始處;size:緩沖區(qū)的長度;sockFlags:Socket相關(guān)標(biāo)識,常用 0;callback:指明回調(diào)方法;state:一個包含此請求的狀態(tài)信息的對象;IAsynResult:它存儲此異步操作的狀態(tài)信息以及所有用戶定義數(shù)據(jù)。 EndReceive:返回成功接收的數(shù)據(jù)長度。異步接收方法使用異步 BeginReceive 操作必須通過調(diào)用EndReceiv

27、e 方法來完成。通常,該方法由 callback 委托調(diào)用。在 EndReceive 調(diào)用中會返回接收到的數(shù)據(jù)長度,接收到的數(shù)據(jù)填充在由BeginReceive 中傳入的緩沖區(qū)中。3.10 常用異步方法ConnectBeginConnect/EndConnect 原型:常用異步方法Connect參數(shù)說明:remoteEP:目標(biāo)的地址和IP信息;callback:回調(diào)方法state:一個包含此請求的狀態(tài)信息的對象;IAsynResult:它存儲此異步操作的狀態(tài)信息以及所有用戶定義數(shù)據(jù)。3.11 完整示例異步服務(wù)器: Server.csproj異步客戶機(jī): Client.csproj4. TcpL

28、istener/TcpClient應(yīng)用程序可以通過 TCPClient、TCPListener類來使用傳輸控制協(xié)議 (TCP) 服務(wù)。TcpListener 類提供一些簡單方法,用于在同步模式下偵聽和接受傳入連接請求??墒褂肨cpClient 或 Socket 來連接 TcpListener。要使用異步 Socket 方法,可以使用NetworkStream 類提供的異步方法。NetworkStream 也支持同步的數(shù)據(jù)讀寫。4.1 TcpListener可使用 IPEndPoint、本地 IP 地址及端口號或者僅使用端口號,來創(chuàng)建 TcpListener。TcpListerner.Start

29、 方法用來開始偵聽傳入的連接請求。Start 將對傳入連接進(jìn)行排隊(duì),直至您調(diào)用 Stop 方法或它已經(jīng)完成MaxConnections 排隊(duì)為止。可使用 AcceptSocket 或 AcceptTcpClient 從傳入連接請求隊(duì)列提取連接。4.2 TcpClientTcpClient 類用于在同步阻止模式下通過網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。為使 TcpClient 連接并交換數(shù)據(jù),可以使用下面兩種方法之一連接到該服務(wù)器端: 創(chuàng)建一個 TcpClient,并調(diào)用三個可用的Connect 方法之一。 使用遠(yuǎn)程主機(jī)的主機(jī)名和端口號創(chuàng)建TcpClient。此構(gòu)造函數(shù)將自動嘗試一個連接。4.3 示例服務(wù)器: TcpLinstener.cs客戶機(jī): TcpClient.cs4.4 TcpListener.Pendingpublic bool Pending ();用于確定是否有到來的連接請求。 有:返回 true; 沒有:返回 false;4.5 服務(wù)端的線程池線程池使用系統(tǒng)的 ThreadPool 對象來處理連接請求。托管線程池中的線程全部為后臺線程,即它

溫馨提示

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

評論

0/150

提交評論