c-網(wǎng)絡(luò)編程-c-套接字編程_第1頁
c-網(wǎng)絡(luò)編程-c-套接字編程_第2頁
c-網(wǎng)絡(luò)編程-c-套接字編程_第3頁
c-網(wǎng)絡(luò)編程-c-套接字編程_第4頁
c-網(wǎng)絡(luò)編程-c-套接字編程_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論