




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
c_網(wǎng)絡(luò)編程_c_套接字編程
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ò)編程仍然是基于套接字的
編鄉(xiāng)白才壬王口。
..套接字編程接口使用了System.Net.Sockets
名字空間。其提供的Socket類為Win32下的套
接字的托管版本。
...NET網(wǎng)絡(luò)編程提供了很多支持:
-Socket;
-TcpClient/UdpClient/TcpListener;
-WebRequest/WebResponse;
-HTTP/FTP/File+WebRequest/WebResponse等。
.NET與Win32套接字對(duì)比
.Net
Win32
Accept/BeginAccept/EndAccept
accept
Bind
bind
Close
closesock
Listen
listen
Select
select
Connect/BeginConnect/EndConnect
connect
GetSocketOption/SetSocketOption
getsockopt/setsockopt
Receive/BeginReceive/EndReceive
recv
Send/BeginSend/EndSend
send
ReceiveFrom/BeginReceiveFrom/EndReceiveFrom
recvfrom
SendTo/BeginSendTo/EndSendTo
sendto
Shutdown
shutdown
.NET網(wǎng)絡(luò)中常用的類
..Socket:實(shí)現(xiàn)Berkeley套接字接口;
..Dns:提供簡單的域名解析功能;
..IPAddress:提供網(wǎng)際協(xié)議(IP)地址;
..IPEndPoint:將網(wǎng)絡(luò)端點(diǎn)表示為IP地址和端口號(hào);
..IPHostEntry:為Internet主機(jī)地址信息提供容器類;
..Networkstream:提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流。
..TcpLinster:從TCP網(wǎng)絡(luò)客戶端偵聽連接。
..TcpClient:為TCP網(wǎng)絡(luò)服務(wù)提供客戶端連接
..UdpClient:提供用戶數(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ǔ)之
±0
..Socket類支持兩種基本模式:
-同步:對(duì)執(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ù)L指定Socket類用來解析網(wǎng)絡(luò)地址的標(biāo)準(zhǔn)
址族(如:AddressFamily.InterNetwork成員指定
IP版本4地址族)。
-參數(shù)2:指定套接字的類型(如:
SocketType.Stream成員表示一個(gè)用于發(fā)送和接收
數(shù)據(jù)并且支持流控制的標(biāo)準(zhǔn)套接字)。
-參數(shù)3:指定在Socket上通信時(shí)使用的網(wǎng)絡(luò)協(xié)議
(如:ProtocolType.Tcp指示套接字使用TCP)。
1.2.1TCP/UDP套接字構(gòu)造
..構(gòu)造TCP套接字
..構(gòu)造UDP套接字
套接字的常用屬性
..Socket常用屬性:
-Blocking:設(shè)置或者獲取套接字阻塞模式;
-Connected:獲取當(dāng)前套接字是否與遠(yuǎn)程主機(jī)相連;
-LocalEndPoint:得到套接字的本地EndPoint對(duì)象;
-RemoteEndPoint:得到套接字的遠(yuǎn)程EndPoint對(duì)象;
-SocketType:套接字類型。
套接字的常用方法
..Socket常用同步的方法:
-Accept;
-Bind;
-Close;
-Connect;
-Disconnect;
-Listen;
-Receive/ReciveFrom;
-Select;
-Send/SendTo/SendFile;
-SetSocketOption/GetSocketOption;
-Shutdown;
說明:紅色的方法有對(duì)應(yīng)的異步方法。
1.2.2使用套接字
..創(chuàng)建套接字后:
-在客戶端,通過Connect方法連接到指定的服務(wù)器,
并通過Send/SendTo或者Receive/ReceiveFrom從
服務(wù)端接收數(shù)據(jù);
-在服務(wù)器端,使用Bind方法綁定所指定的接口使
Socket與一個(gè)本地終結(jié)點(diǎn)相聯(lián),并通過Listen方法
偵聽該接口上的請(qǐng)求,當(dāng)偵聽到用戶端的連接時(shí),
調(diào)用Accept完成連接的操作,創(chuàng)建新的Socket以處
理傳入的連接請(qǐng)求。
-使用完Socket后,使用Shutdown方法結(jié)束通信,
并使用Close方法關(guān)閉Socketo
..上面的是同步方式的通信,還有相對(duì)應(yīng)的異步
的Begin/End連接與通信方式。
1.2.3Bind方法
.?套接字服務(wù)器的綁定端點(diǎn)需要使用到
Socket.Bind()方法。
..在調(diào)用Bind之前,必先創(chuàng)建本地
IPEndPoint。可以用IPAddress.Any作
為地址參數(shù)創(chuàng)建一個(gè)IPEndPoint,這樣,
將會(huì)使用所有可能的網(wǎng)絡(luò)地址。
..通過調(diào)用LocalEndPoint獲知所分配的本
地網(wǎng)絡(luò)地址和端口號(hào)。
1.2.4Listen方法
..Socket.ListenO將套接字置于監(jiān)聽狀態(tài)。
-backlog掛起連接隊(duì)列的最大長度。
1.2.5SetSocketOption
??設(shè)置或者取消套接字的對(duì)應(yīng)的屬性。
-參數(shù)1:可以是Socket,IP,TCP,UDP;
-參數(shù)2:各種與參數(shù)1對(duì)應(yīng)的屬性,如:Broadcast,
RecevieBuffer,ReceiveTimeout等待。
-參數(shù)3:true/false0true一使能;false一取消。
1.3地址/端口信息
..TCP/IP使用一個(gè)網(wǎng)絡(luò)地址和一個(gè)服務(wù)端
口號(hào)來唯一標(biāo)識(shí)設(shè)備。
-網(wǎng)絡(luò)地址標(biāo)識(shí)網(wǎng)絡(luò)上的特定設(shè)備;
-端口號(hào)標(biāo)識(shí)要連接到的該設(shè)備上的特定服務(wù)。
..網(wǎng)絡(luò)地址和服務(wù)端口的組合稱為網(wǎng)絡(luò)端
點(diǎn),它在.NET中由EndPoint類表示。
對(duì)于IP地址族,該類為IPEndPoint。
1.3.UPEndPoint使用
..構(gòu)造函數(shù)兩種:
..其IPEndPoint的使用
..問題:在Win32中記錄IP地址和端口信
息是使用的什么?
1.3.2地址處理
..IPAddress在System.Net名字空間中。
..它包含計(jì)算機(jī)在IP網(wǎng)絡(luò)上的地址相關(guān)操作和
屬性。
..根據(jù)字符串獲取IPAddress信息:
-Parse();
..提供的常用地址:
-Any;
-Broadcast;
-Loopback;
-None;
1.3.3主機(jī)解析
..Dns類是一個(gè)靜態(tài)類,它從域名系統(tǒng)中檢索關(guān)
于特定主機(jī)的信息。
..IPHostEntry類將主機(jī)名、別名和一組匹配的
IP地址關(guān)聯(lián)。常和Dns類一起使用。
..在IPHostEntry類的實(shí)例中返回來自DNS查
詢的主機(jī)信息。如果指定的主機(jī)在數(shù)據(jù)
庫中有多個(gè)入口,WOIPHostEntry包含多個(gè)IP
地址和別名。
..問題:在Win32中記錄地址和機(jī)器名信息是
使用的什么?
1.3.4主機(jī)解析用法
..Dns.Resove用于解析主機(jī)名到IPHostEntry。
.?使用:
1.3.5Dns類常用方法
..GetHostName()可以獲得主機(jī)名。
..GetHostByName()方法根據(jù)主機(jī)名向DNS服務(wù)
器查詢主機(jī)信息。
..GetHostByAddress()方法根據(jù)地址信息查詢主
機(jī)信息。
1.3.6示例1------地址信息
..+..d:1.3.7e.ay2.a.all.i,t...4-
1.3.7示例2——構(gòu)造服務(wù)器
..±..d:Win32e.o.''."2C°d."b...,t...4-1X.dX.u.
£.
..Win32如何創(chuàng)建并綁定一個(gè)服務(wù)器套接
字的?
1.4出錯(cuò)/異常信息
..SocketException用來拋出Socket相關(guān)異常信息。
..當(dāng)網(wǎng)絡(luò)發(fā)生錯(cuò)誤時(shí),Socket和Dns引發(fā)
SocketException。
..使用SocketException.ErrorCode可以獲取特定
的錯(cuò)誤代碼,Message可以獲得錯(cuò)誤消息。
2.同步服務(wù)器/客戶機(jī)
..討論一種常見網(wǎng)絡(luò)服務(wù)器模式:
-同步阻塞服務(wù)器;
-同步阻塞客戶機(jī);
..和Win32下的阻塞模型類似,對(duì)每一個(gè)
接受的請(qǐng)求產(chǎn)生新的線程,并在此線程
中完成所有的與客戶機(jī)的數(shù)據(jù)交互。
2.1同步阻塞服務(wù)器開發(fā)
..這是使用起來最簡單的一種模型。
..任何時(shí)候調(diào)用一個(gè)綁定I/O的.NET套接字
方法,如果套接字上沒有等候處理的數(shù)
據(jù),該調(diào)用就會(huì)阻塞。
?.如果需要做其他的事情,或者為其它的
連接請(qǐng)求提供服務(wù),就需要在應(yīng)用程序
中創(chuàng)建額外的線程。
..和Win32下的阻塞模型類似。
同步阻塞模型
2.1.1同步Accept
..其函數(shù)定義:
..Accept以同步方式從偵聽套接字的連接
請(qǐng)求隊(duì)列中提取第一個(gè)掛起的連接請(qǐng)求,
然后創(chuàng)建并返回新的Socketo
..此處使用Socket.RemoteEndPoint來獲
取連接機(jī)器的IP和端口信息。
..問題:Win32中何處獲取請(qǐng)求連接機(jī)器
的地址和端口信息?
同步Accept接受連接
..在阻止模式中,Accept將一直處于阻止?fàn)顟B(tài),
直到傳入的連接嘗試排入隊(duì)列。連接被接受后,
原來的Socket繼續(xù)將傳入的連接請(qǐng)求排入隊(duì)
列,直到您關(guān)閉它。
2.1.2同步Send發(fā)送數(shù)據(jù)
??將數(shù)據(jù)發(fā)送到連接的Socket:
..SocketFlags通常使用SocketFlags.None,發(fā)
送字節(jié)數(shù)的默認(rèn)值為緩沖區(qū)的大小。
..Send對(duì)面向連接的協(xié)議和無連接協(xié)議均適用。
同步Send注意事項(xiàng)
..如果您使用的是面向連接的協(xié)議,則除非使用
Socket.SendTimeout設(shè)置了超時(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ù)會(huì)立即出現(xiàn)在網(wǎng)絡(luò)上。為
提高網(wǎng)絡(luò)效率,基礎(chǔ)系統(tǒng)可能會(huì)延遲傳輸,直
到收集了足夠多的傳出數(shù)據(jù)后才開始發(fā)送。
2.1.3同步Receive發(fā)送數(shù)據(jù)
..從Socket中接收數(shù)據(jù)(常用第3個(gè)):
..Receive方法將數(shù)據(jù)讀入第一個(gè)參數(shù)中,并返
回成功讀取的字節(jié)數(shù)。第一個(gè)int是接收多少數(shù)
據(jù)到緩沖區(qū),第二個(gè)int是指明緩沖區(qū)的偏移量。
..如果沒有可讀取的數(shù)據(jù),則Receive方法將一
直處于阻止?fàn)顟B(tài),直到數(shù)據(jù)可用,除非使用
ReceiveTimeout設(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/0o
..另外Networkstream還提供異步的發(fā)送
和接收數(shù)據(jù)的方法:
-BeginWrite/EndWrite
-BeginRead/EndRead
Write發(fā)送數(shù)據(jù)
..Write函數(shù)定義:
-參數(shù)1:byte數(shù)組,包含即將寫入到
Networkstream的數(shù)據(jù)。
-參數(shù)2:buffer中開始寫入數(shù)據(jù)的位置。
-參數(shù)3:準(zhǔn)備寫入NetworkStream的字節(jié)數(shù)。
Read接收數(shù)據(jù)
.?函數(shù)定義:
參1
-用于存儲(chǔ)從Networkstream讀取的
據(jù)
數(shù)
O
參2
-buffer中的開始存放數(shù)據(jù)的偏移量。
-參數(shù)3:buffer長度。
-返回值:成功讀取的字節(jié)數(shù)。
Write/Read----示例
2.2同步客戶機(jī)
.?客戶機(jī)需要通過三次握手完成到服務(wù)器的連
接。.NET環(huán)境提供了同步Connect函數(shù)完成
到服務(wù)器的連接。
..TCP連接中Connect方法會(huì)同步建立
LocalEndPoint與指定遠(yuǎn)程終結(jié)點(diǎn)之間的網(wǎng)絡(luò)
連接,同時(shí)保存本地地址和端口信息。
..遠(yuǎn)程結(jié)點(diǎn)的信息存放在
Socket.RemoteEndPoint中。
..客戶機(jī)與服務(wù)器的通信也是使用Send/Receive
或Networkstream的Read/Write完成。
2.2.1客戶機(jī)Connect
...NET環(huán)境下常使用的Connect原型有:
..其中后面兩個(gè)為.NET2.0新增。
.?使用示例:
2.3服務(wù)器/客戶機(jī)示例
.?服務(wù)器(多線程同步阻塞服務(wù)器,為每一
個(gè)客戶新建一個(gè)線程來處理):
-FirstNetwork.csproj
..客戶機(jī):
-ClientNetwork.csproj
3.異步服務(wù)器/客戶機(jī)
..在.NET套接字中,異步模型是用在一個(gè)
或者多個(gè)套接字上管理I/O的最佳途徑。
..因?yàn)楫惒侥P筒捎玫暮蚖in32下的完成
端口模型類似,而且在NT系統(tǒng)中,其
內(nèi)部實(shí)現(xiàn)上使用了完成端口I/O模型,
因此是最有效率的一種。
..回憶:Win32下有那些I/O模型?
服務(wù)器為
Pentinum4
1.7GXeon,
內(nèi)存768M,
100M網(wǎng)絡(luò),
系統(tǒng)WinXP
3.1普通程序異步執(zhí)行
??C#有多種常用的異步調(diào)用步驟,其中有兩種
分別是:
-進(jìn)行某些操作,然后調(diào)用Endlnvoke一直阻塞到
調(diào)用完成。
-將用于回調(diào)方法的委托傳遞給Beginlnvokeo該方
法在異步調(diào)用完成后在ThreadPool線程上執(zhí)行,
它可以調(diào)用Endlnvoke。
..代碼:Asyn-1.csAsyn-4.cs
3.2網(wǎng)絡(luò)相關(guān)異步方法
.?前面提到幾種用來異步處理的I/O方法:
-BeginAccept/EndAccept;
-BeginConnect/EndConnect;
-BeginReceive/EndReceive;
-BeginSend/EndSend;
-BeginReciveFrom/EndReceiveFrom;
-BeginSendTo/EndSendTo;
-都是有Accept、Connect>Receive、Send等都是
增加了一對(duì)BeginXXX/EndXXX
3.3異步方法的工作機(jī)制
..異步套接字使用系統(tǒng)線程池中的線程處理傳入
的連接。
..一些線程負(fù)責(zé)接受連接,另一些線程用于處理
每個(gè)傳入的連接,還有一些線程負(fù)責(zé)接收連接
數(shù)據(jù)。這些線程可以是同一個(gè)線程,具體取決
于線程池所分配的線程。
..System.Threading.ManualResetEvent類掛起
主線程的執(zhí)行并在執(zhí)行可以繼續(xù)時(shí)發(fā)出信號(hào)。
3.4性能改善
??異步調(diào)用的執(zhí)行上下文(安全上下文、
模擬用戶及調(diào)用上下文)會(huì)被.NET環(huán)
境緩存,以用于Socket異步方法。
?.在首次使用一個(gè)特定上下文(特定
Socket異步方法、特定Socket實(shí)例及
特定回調(diào))后,該上下文的后續(xù)使用將
得到性能改善。
3.5異步方法的使用
??要異步調(diào)用一個(gè)I/O方法,必須調(diào)用與同步方
法中對(duì)應(yīng)的方法“BeginXXX”,并在它的調(diào)用
中提供一個(gè)回調(diào)方法。
..BeginXXX調(diào)用完成后,調(diào)用線程可以繼續(xù)做
其它事情,而提供的回I調(diào)方法則會(huì)去處理I/O
讀寫。
..在回調(diào)方法內(nèi)部,當(dāng)Socket完成I/O操作后,
可以使用對(duì)等的EndXXX來獲取完成的I/O
果。
3.6IAsyncResult接口
..lAsyncResult接口由包含可異步操作的方法的類實(shí)現(xiàn)。
..它是啟動(dòng)異步操作的方法的返回類型,如
BeginAccept,也是結(jié)束異步操作的方法的參數(shù)的類型,
如EndAccepto
..lAsyncResult也將傳遞給由AsyncCallback委托調(diào)用
的方法。它的AsyncState屬性能夠獲取用戶定義的對(duì)
象,就是在BeginXXX中傳入的Object對(duì)象。
3.7常用異步方法---Accept
..BeginAccept/EndAccept原型:
-AsynCallback:指明回調(diào)方法,異步執(zhí)行體;
-Object:一個(gè)包含此請(qǐng)求的狀態(tài)信息的對(duì)象;
-lAsynResult:存儲(chǔ)此異步操作的狀態(tài)信息
以及任何用戶定義數(shù)據(jù)。
-EndAccept:返回連接客戶機(jī)的套接字。
3.7.1異步Accept
.?為開始接受網(wǎng)絡(luò)連接請(qǐng)求,其步驟如下:
1)初始化Socket,并完成綁定和監(jiān)聽。
2)使用BeginAccept方法開始接受新連接。
3)當(dāng)套接字上接收到新連接請(qǐng)求時(shí),將調(diào)用接受回
調(diào)方法。
4)回調(diào)方法通過EndAccept來獲取處理客戶機(jī)連接
請(qǐng)求的Socket句柄,并將該Socket提交給將處
理請(qǐng)求的線程。回調(diào)方法實(shí)現(xiàn)AsyncCallback
委托;它返回void,并帶一個(gè)lAsyncResult類型
的參數(shù)。
3.8常用異步方法——Send
..將數(shù)據(jù)異步的發(fā)送到連接的Socketo
..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)識(shí),常用0;
-callback:指明回調(diào)方法;
-state:一個(gè)包含此請(qǐng)求的狀態(tài)信息的對(duì)象;
-lAsynResult:存儲(chǔ)此異步操作的狀態(tài)信息;
-EndSend:返回成功發(fā)送的數(shù)據(jù)長度。
BeginSend
..BeginSend方法可對(duì)在Connect>
BeginConnect>Accept或BeginAccept方法
中建立的遠(yuǎn)程主機(jī)啟動(dòng)異步發(fā)送操作。
..如果沒有首先調(diào)用Accept、BeginAccept>
Connect或BeginConnect,貝I」BeginSend將
會(huì)引發(fā)異常。
..調(diào)用BeginSend方法將使您能夠在單獨(dú)的執(zhí)
行線程中發(fā)送數(shù)據(jù)。
回調(diào)方法----AsyncCallback
..創(chuàng)建一個(gè)實(shí)現(xiàn)AsyncCallback委托的回調(diào)方
法并將它的名稱傳遞給BeginSend方法。
..因此,state參數(shù)至少必須包含用于通信的已
連接或默認(rèn)Socket。如果回調(diào)需要更多信息,
則可以創(chuàng)建一個(gè)小型類或結(jié)構(gòu),用于保存
Socket和其他所需的信息。通過state參數(shù)將
此類的一個(gè)實(shí)例傳遞給BeginSend方法。
EndSend
..回調(diào)方法應(yīng)調(diào)用EndSend方法。
.?當(dāng)應(yīng)用程序調(diào)用BeginSend時(shí),系統(tǒng)將使用
一個(gè)單獨(dú)的線程來執(zhí)行指定的回調(diào)方法,并阻
止EndSend,直到Socket發(fā)送了請(qǐng)求的字節(jié)
數(shù)或引發(fā)了異常為止。
..如果希望在調(diào)用BeginSend方法之后使原始
線程阻止,請(qǐng)使用WaitHandle.WaitOne方法。
當(dāng)需要原始線程繼續(xù)執(zhí)行時(shí),請(qǐng)?jiān)诨卣{(diào)方法中
調(diào)用System.Threading.ManualResetEvent
的Set方法。
3.9常用異步方法一Receive
??BeginReceive/EndReceive原型:
常用異步方法一Receive
.?參數(shù)說明:
-buffer:存放接收數(shù)據(jù)的緩沖區(qū);
-offset:緩沖區(qū)中準(zhǔn)備接收的數(shù)據(jù)的開始處;
-size:緩沖區(qū)的長度;
-sockFlags:Socket相關(guān)標(biāo)識(shí),常用0;
-callback:指明回調(diào)方法;
-state:一個(gè)包含此請(qǐng)求的狀態(tài)信息的對(duì)象;
-lAsynResult:它存儲(chǔ)此異步操作的狀態(tài)信息以及所
有用戶定義數(shù)據(jù)。
-EndReceive:返RI成功接收的數(shù)據(jù)長度。
異步接收方法使用
..異步BeginReceive操作必須通過調(diào)用
EndReceive方法來完成。通常,該方法
由callback委托調(diào)用。
..在EndReceive調(diào)用中會(huì)返回接收到的
數(shù)據(jù)長度,接收到的數(shù)據(jù)填充在由
BeginReceive中傳入的緩沖區(qū)中。
3.10常用異步方法一Connect
..BeginConnect/EndConnect原型:
常用異步方法一Connect
.?參數(shù)說明:
-remoteEP:目標(biāo)的地址和IP信息;
-callback:回調(diào)方法
-state:一個(gè)包含此請(qǐng)求的狀態(tài)信息的對(duì)象;
-lAsynResult:它存儲(chǔ)此異步操作的狀態(tài)信
息以及所有用戶定義數(shù)據(jù)。
3.11完整示例
??異步服務(wù)器:
-Server,csproj
..異步客戶機(jī):
-Client.csproj
4.TcpListener/TcpClient
..應(yīng)用程序可以通過TCPClient、TCPListener
類來使用傳輸控制協(xié)議(TCP)服務(wù)。
..TcpListener類提供一些簡單方法,用于在同步
模式下偵聽和接受傳入連接請(qǐng)求??墒褂?/p>
TcpClient或Socket來連接TcpListener。
.?要使用異步Socket方法,可以使用
Networkstream類提供的異步方法。
Networkstream也支持同步的數(shù)據(jù)讀寫。
4.ITcpListener
..可使用IPEndPoint、本地IP地址及端口號(hào)或
者僅使用端口號(hào),來創(chuàng)建TcpListener。
..TcpListerner.Start方法用來開始偵聽傳入的連
接請(qǐng)求。Start將對(duì)傳入連接進(jìn)行排隊(duì),直至
您調(diào)用Stop方法或它已經(jīng)完成
MaxConnections排隊(duì)為止。
..可使用AcceptSocket或AcceptTcpClient從
傳入連接請(qǐng)求隊(duì)列提取連接。
4.2TcpClient
..TcpClient類用于在同步阻止模式下通過
網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。
..為使TcpClient連接并交換數(shù)據(jù),可以使
用下面兩種方法之一連接到該服務(wù)器端:
-創(chuàng)建一個(gè)TcpClient,并調(diào)用三個(gè)可用的
Connect方法之一。
-使用遠(yuǎn)程主機(jī)的主機(jī)名和端口號(hào)創(chuàng)建
TcpCliento此構(gòu)造函數(shù)將自動(dòng)嘗試一個(gè)連接。
4.3示例
.?服務(wù)器:
-TcpLinstener.cs
..客戶機(jī):
-TcpClient.cs
4.4TcpListener.Pending
..publicboolPending();
..用于確定是否有到來的連接請(qǐng)求。
-有:返回true;
-沒有:返回false;
4.5服務(wù)端的線程池
..線程池使用系統(tǒng)的ThreadPool對(duì)象來處
理連接請(qǐng)求。
..托管線程池中的線程全部為后臺(tái)線程,
即它們的I
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 駱駝祥子人物性格分析教學(xué)教案:探究社會(huì)變遷與人性的掙扎
- 汽車租賃三方合同
- 農(nóng)作物種植技術(shù)手冊(cè)
- 圖表展示各類數(shù)據(jù)統(tǒng)計(jì)情況
- 小學(xué)生數(shù)學(xué)應(yīng)用題的作文分析與實(shí)踐指導(dǎo)
- 留置擔(dān)保合同協(xié)議書
- 文學(xué)佳作圍城中的人物形象解讀
- 智能交通大數(shù)據(jù)平臺(tái)開發(fā)協(xié)議
- 企業(yè)戰(zhàn)略聯(lián)盟穩(wěn)定性評(píng)價(jià)與維護(hù)
- 產(chǎn)品推廣合作合同
- FZ/T 24011-2019羊絨機(jī)織圍巾、披肩
- 【課件】2.1.1植物細(xì)胞工程的基本技術(shù)課件-2021-2022學(xué)年高二下學(xué)期生物人教版選擇性必修3
- 35kV集電線路直埋施工組織設(shè)計(jì)方案
- 客戶來訪登記表
- 日產(chǎn)新軒逸電子手冊(cè)cvt
- 人教八年級(jí)下冊(cè)英語U5Do-you-remember-what-you-were-doing?課件
- 大連市小升初手冊(cè)
- 醫(yī)療垃圾管理及手衛(wèi)生培訓(xùn)PPT課件
- 嚇數(shù)基礎(chǔ)知識(shí)共20
- 鋰電池安全知識(shí)培訓(xùn)-課件
- 電子產(chǎn)品高可靠性裝聯(lián)工藝下
評(píng)論
0/150
提交評(píng)論