資源描述:
《基于c#的socket編程的tcp異步實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、基于C#的socket編程的TCP異步實現(xiàn)一、摘要 本篇博文闡述基于TCP通信協(xié)議的異步實現(xiàn)。?二、實驗平臺 VisualStudio2010?三、異步通信實現(xiàn)原理及常用方法3.1建立連接 在同步模式中,在服務(wù)器上使用Accept方法接入連接請求,而在客戶端則使用Connect方法來連接服務(wù)器。相對地,在異步模式下,服務(wù)器可以使用BeginAccept方法和EndAccept方法來完成連接到客戶端的任務(wù),在客戶端則通過BeginConnect方法和EndConnect方法來實現(xiàn)與服務(wù)器的連
2、接。 BeginAccept在異步方式下傳入的連接嘗試,它允許其他動作而不必等待連接建立才繼續(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)建本地終
3、節(jié)點,并新建套接字與本地終節(jié)點進行綁定;(2)在端口上偵聽是否有新的連接請求;(3)請求開始接入新的連接,傳入Socket的實例或者StateOjbect的實例?! ⒖即a://定義IP地址IPAddresslocal=IPAddress.Parse("127.0,0,1");IPEndPointiep=newIPEndPoint(local,13000);//創(chuàng)建服務(wù)器的socket對象Socketserver=newSocket(AddressFamily.InterNetwork,Sock
4、etType.Stream,ProtocolType.Tcp);server.Bind(iep);server.Listen(20);server.BeginAccecpt(newAsyncCallback(Accept),server);otherstaffoftheCentre.Duringthewar,ZhuwastransferredbacktoJiangxi,andDirectorofthenewOfficeinJingdezhen,JiangxiCommitteeSecretary.S
5、tartingin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenterprisesMinister,ShenmufuguSARmissions,DirectorofNingxiaCountypartyCommitteeSecreta
6、ryandrecorderoftheCountypartyCommitteeSecretary,Ministersand 當BeginAccept()方法調(diào)用結(jié)束后,一旦新的連接發(fā)生,將調(diào)用回調(diào)函數(shù),而該回調(diào)函數(shù)必須包括用來結(jié)束接入連接操作的EndAccept()方法。該方法參數(shù)列表為SocketEndAccept(IAsyncResultiar)下面為回調(diào)函數(shù)的實例:voidAccept(IAsyncResultiar){//還原傳入的原始套接字SocketMyServer=(Socket)i
7、ar.AsyncState;//在原始套接字上調(diào)用EndAccept方法,返回新的套接字Socketservice=MyServer.EndAccept(iar);} 至此,服務(wù)器端已經(jīng)準備好了??蛻舳藨ㄟ^BeginConnect方法和EndConnect來遠程連接主機。在調(diào)用BeginConnect方法時必須注冊相應的回調(diào)函數(shù)并且至少傳遞一個Socket的實例給state參數(shù),以保證EndConnect方法中能使用原始的套接字。下面是一段是BeginConnect的調(diào)用:Socketsock
8、et=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)IPAddressip=IPAddress.Parse("127.0.0.1");IPEndPointiep=newIPEndPoint(ip,13000);socket.BeginConnect(iep,newAsyncCallback(Connect),socket); EndConnect是一種阻塞方法,用于完成BeginCo