24基于C#的socket編程的TCP異步實(shí)現(xiàn)

24基于C#的socket編程的TCP異步實(shí)現(xiàn)

ID:41033600

大小:202.00 KB

頁數(shù):18頁

時(shí)間:2019-08-14

24基于C#的socket編程的TCP異步實(shí)現(xiàn)_第1頁
24基于C#的socket編程的TCP異步實(shí)現(xiàn)_第2頁
24基于C#的socket編程的TCP異步實(shí)現(xiàn)_第3頁
24基于C#的socket編程的TCP異步實(shí)現(xiàn)_第4頁
24基于C#的socket編程的TCP異步實(shí)現(xiàn)_第5頁
資源描述:

《24基于C#的socket編程的TCP異步實(shí)現(xiàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、基于C#的socket編程的TCP異步實(shí)現(xiàn)一、摘要  本篇博文闡述基于TCP通信協(xié)議的異步實(shí)現(xiàn)。?二、實(shí)驗(yàn)平臺  VisualStudio2010?三、異步通信實(shí)現(xiàn)原理及常用方法3.1建立連接   在同步模式中,在服務(wù)器上使用Accept方法接入連接請求,而在客戶端則使用Connect方法來連接服務(wù)器。相對地,在異步模式下,服務(wù)器可以使用BeginAccept方法和EndAccept方法來完成連接到客戶端的任務(wù),在客戶端則通過BeginConnect方法和EndConnect方法來實(shí)現(xiàn)與服務(wù)器的連接?! eginAccept在異步方式下傳入的連接嘗試

2、,它允許其他動(dòng)作而不必等待連接建立才繼續(xù)執(zhí)行后面程序。在調(diào)用BeginAccept之前,必須使用Listen方法來偵聽是否有連接請求,BeginAccept的函數(shù)原型為:BeginAccept(AsyncCallbackAsyncCallback,Ojbectstate)參數(shù):AsyncCallBack:代表回調(diào)函數(shù)state:表示狀態(tài)信息,必須保證state中包含socket的句柄  使用BeginAccept的基本流程是:(1)創(chuàng)建本地終節(jié)點(diǎn),并新建套接字與本地終節(jié)點(diǎn)進(jìn)行綁定;(2)在端口上偵聽是否有新的連接請求;(3)請求開始接入新的連接,傳入S

3、ocket的實(shí)例或者StateOjbect的實(shí)例?! ⒖即a://定義IP地址IPAddresslocal=IPAddress.Parse("127.0,0,1");IPEndPointiep=newIPEndPoint(local,13000);//創(chuàng)建服務(wù)器的socket對象Socketserver=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);server.Bind(iep);server.Listen(20);server.BeginAccec

4、pt(newAsyncCallback(Accept),server);  當(dāng)BeginAccept()方法調(diào)用結(jié)束后,一旦新的連接發(fā)生,將調(diào)用回調(diào)函數(shù),而該回調(diào)函數(shù)必須包括用來結(jié)束接入連接操作的EndAccept()方法。該方法參數(shù)列表為SocketEndAccept(IAsyncResultiar)下面為回調(diào)函數(shù)的實(shí)例:voidAccept(IAsyncResultiar){//還原傳入的原始套接字SocketMyServer=(Socket)iar.AsyncState;//在原始套接字上調(diào)用EndAccept方法,返回新的套接字Socketse

5、rvice=MyServer.EndAccept(iar);}  至此,服務(wù)器端已經(jīng)準(zhǔn)備好了。客戶端應(yīng)通過BeginConnect方法和EndConnect來遠(yuǎn)程連接主機(jī)。在調(diào)用BeginConnect方法時(shí)必須注冊相應(yīng)的回調(diào)函數(shù)并且至少傳遞一個(gè)Socket的實(shí)例給state參數(shù),以保證EndConnect方法中能使用原始的套接字。下面是一段是BeginConnect的調(diào)用:Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)IPAdd

6、ressip=IPAddress.Parse("127.0.0.1");IPEndPointiep=newIPEndPoint(ip,13000);socket.BeginConnect(iep,newAsyncCallback(Connect),socket);  EndConnect是一種阻塞方法,用于完成BeginConnect方法的異步連接誒遠(yuǎn)程主機(jī)的請求。在注冊了回調(diào)函數(shù)后必須接收BeginConnect方法返回的IASynccReuslt作為參數(shù)。下面為代碼演示:voidConnect(IAsyncResultiar){Socketclie

7、nt=(Socket)iar.AsyncState;try{client.EndConnect(iar);}catch(Exceptione){Console.WriteLine(e.ToString());}finally{}}?  除了采用上述方法建立連接之后,也可以采用TcpListener類里面的方法進(jìn)行連接建立。下面是服務(wù)器端對關(guān)于TcpListener類使用BeginAccetpTcpClient方法處理一個(gè)傳入的連接嘗試。以下是使用BeginAccetpTcpClient方法和EndAccetpTcpClient方法的代碼:publics

8、taticvoidDoBeginAccept(TcpListenerlistner){//開始

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。