欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C#異步通信的示例分析

這篇文章主要為大家展示了“C#異步通信的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“C#異步通信的示例分析”這篇文章吧。

郫都網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

C#異步通信概念及應(yīng)用的認(rèn)識(shí)首先讓我們來(lái)看看:在網(wǎng)絡(luò)編程中運(yùn)用Socket,常常需要長(zhǎng)期監(jiān)聽(tīng)某個(gè)端口,以獲得Socket連接,進(jìn)而執(zhí)行相關(guān)操作。

但此時(shí),主線程就會(huì)被阻塞,無(wú)法做其他事情。為了解決這類問(wèn)題,Socket類中提供了一些支持異步操作的方法,如表17-10所示。

下表為Socket類中支持異步操作的方法

   

說(shuō)   

BeginAccept()

開(kāi)始一個(gè)異步請(qǐng)求,以創(chuàng)建一個(gè)新的Socket對(duì)象來(lái)接受傳入的連接請(qǐng)求

EndAccept()

結(jié)束一個(gè)異步請(qǐng)求,以創(chuàng)建一個(gè)新的Socket對(duì)象來(lái)接受傳入的連接請(qǐng)求

BeginConnect()

開(kāi)始一個(gè)對(duì)遠(yuǎn)程主機(jī)的異步請(qǐng)求

EndConnect()

結(jié)束一個(gè)對(duì)遠(yuǎn)程主機(jī)的異步請(qǐng)求

BeginDisconnect()

開(kāi)始異步請(qǐng)求從遠(yuǎn)程主機(jī)斷開(kāi)連接

EndDisconnect()

結(jié)束從遠(yuǎn)程主機(jī)斷開(kāi)連接的異步請(qǐng)求

BeginReceive()

開(kāi)始從連接的Socket中異步接收數(shù)據(jù)

EndReceive()

結(jié)束從連接的Socket中異步接收數(shù)據(jù)

BeginReceiveFrom()

開(kāi)始從指定網(wǎng)絡(luò)設(shè)備中異步接收數(shù)據(jù)

EndReceiveFrom()

結(jié)束從指定網(wǎng)絡(luò)設(shè)備中異步接收數(shù)據(jù)

BeginSend()

開(kāi)始將數(shù)據(jù)異步發(fā)送到連接的Socket

EndSend()

結(jié)束數(shù)據(jù)的異步發(fā)送

BeginSendFile()

開(kāi)始將文件異步發(fā)送到連接的Socket

EndSendFile()

結(jié)束文件的異步發(fā)送

BeginSendTo()

向特定的遠(yuǎn)程主機(jī)異步發(fā)送數(shù)據(jù)

EndSendTo()

結(jié)束對(duì)遠(yuǎn)程主機(jī)數(shù)據(jù)的異步發(fā)送

從上表中可以看出,這些方法都是成對(duì)出現(xiàn)的。這些方法能避免網(wǎng)絡(luò)通信中的阻塞現(xiàn)象。這些方法的使用機(jī)制是在Begin開(kāi)頭的方法中注冊(cè)一個(gè)回調(diào)函數(shù),當(dāng)對(duì)應(yīng)的事件發(fā)生時(shí),調(diào)用該回調(diào)函數(shù),且在回調(diào)函數(shù)中調(diào)用對(duì)應(yīng)的End開(kāi)頭的方法。

下面以BeginAccept()和EndAccept()為例,說(shuō)明異步方法的用法。BeginAccept()的聲明如下所示。

public IAsyncResult BeginAccept(AsynCallback callback,  object state);

其中,***個(gè)參數(shù)是異步委托AsynCallb了ack,state包含此請(qǐng)求的狀態(tài)信息的對(duì)象。

EndAccept()方法具有三種重載形式,如下所示。

public Socket EndAccept(IAsyncResult asynresult);   public Socket EndAccept(out byte[] buffer,  IAsyncResult asynresult);   public Socket EndAccept(out byte[] buffer,  out int bytesTransferred, IAsyncResult asynresult,);

asynresult用于存儲(chǔ)此異步操作的狀態(tài)信息及任何用戶定義的數(shù)據(jù);buffer表示需要傳輸?shù)淖止?jié)數(shù)據(jù);

bytesTransferred表示已經(jīng)傳輸?shù)淖止?jié)數(shù)。這里的out參數(shù)與ref的用法類似,均表示傳遞引用。它們的區(qū)別是ref是傳遞參數(shù)的地址,out是返回值。

具體用法如下所示。

private AsyncCallback callbackOnAccpt; //定制回調(diào)方法   private Socket s;   ……  //C#異步通信 s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);   callbackAccpt = new AsyncCallback(this.OnAccept);//實(shí)例化回調(diào)方法   s.BeginAccept(callbackOnAccpt, this.s); //開(kāi)始異步請(qǐng)求   ……   private void OnAccept(IAsyncResult asynresult)   {   //C#異步通信……   s.EndAccept(asynresult); //結(jié)束異步請(qǐng)求   ……   }

BeginConnect()和EndConnect()用于對(duì)遠(yuǎn)程主機(jī)的異步連接請(qǐng)求。BeginConnect()的聲明如下所示。

public IAsyncResult BeginConnect(EndPoint remoteEP,  AsyncCallback callback, object state);   public IAsyncResult BeginConnect(IPAddress address,  int port,AsyncCallback requestedcallback,object state);   public IAsyncResult BeginConnect(IPAddress[] address,  int port,AsyncCallback requestedcallback,object state);   //C#異步通信public IAsyncResult BeginConnect(string host,int port,  AsyncCallback requestedcallback,object state);

它的每個(gè)重載形式均含有AsyncCallback參數(shù),這是這類Begin開(kāi)頭的方法的特點(diǎn);remoteEP表示遠(yuǎn)程主機(jī)的IP和端口。

EndConnect()的聲明如下所示。

public Socket EndConnect(IAsyncResult asynresult);

它的參數(shù)的意義和EndAccept()完全一致。

BeginSend()表示開(kāi)始將數(shù)據(jù)異步發(fā)送到連接的Socket,它最常用的聲明如下所示。

public IAsyncResult BeginSend(byte[] buffer,  int offset,int size,SocketFlags socketFlags,   AsyncCallback callback,object state);

Buffer表示要發(fā)送的數(shù)據(jù),offset表示buffer中發(fā)送數(shù)據(jù)的位置,size為發(fā)送字節(jié)數(shù)的大小,socketFlags指SocketFlags值的按位組合。

EndSend()的聲明如下所示。

public Socket EndSend(IAsyncResult asynresult);

BeginReceive()表示開(kāi)始從連接的Socket中異步接收數(shù)據(jù),它的常見(jiàn)聲明如下所示。

public IAsyncResult BeginReceive(byte[] buffer,  int offset,int size,SocketFlags socketFlags,   AsyncCallback callback,object state);

它的參數(shù)和BeginSend()是完全一致的,這里不再贅述。

EndReceive()的聲明如下所示。

public Socket EndReceive(IAsyncResult asynresult);

C#異步通信之Socket中異步通信的實(shí)現(xiàn)要遠(yuǎn)比同步困難,這里不再舉例。簡(jiǎn)單地說(shuō),在同步中,主線程如果調(diào)用一個(gè)方法,那么主線程必須等到方法線程執(zhí)行完才能繼續(xù)往下執(zhí)行。因此,主線程和方法線程的執(zhí)行是串行的。而在異步中,兩者能同時(shí)執(zhí)行,它們的執(zhí)行是并行的。

以上是“C#異步通信的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享標(biāo)題:C#異步通信的示例分析
URL標(biāo)題:http://chinadenli.net/article16/ppcogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、定制網(wǎng)站、App設(shè)計(jì)小程序開(kāi)發(fā)、企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
高跟丝袜av在线一区二区三区| 色丁香一区二区黑人巨大| 欧美国产在线观看精品| 精品视频一区二区不卡| 精品精品国产自在久久高清| 国产精品一区二区视频成人 | 国产成人精品久久二区二区| 福利在线午夜绝顶三级| 天堂网中文字幕在线观看| 精品少妇一区二区三区四区| 日本不卡在线视频你懂的 | 亚洲欧美中文日韩综合| 中文文精品字幕一区二区| a久久天堂国产毛片精品| 亚洲精品福利入口在线| 欧美精品日韩精品一区| 久久国产亚洲精品成人| 成人午夜激情免费在线| 亚洲精品一区二区三区日韩| 又黄又爽禁片视频在线观看| 暴力性生活在线免费视频| 熟妇人妻av中文字幕老熟妇| 麻豆蜜桃星空传媒在线观看| 国产成人免费高潮激情电| 午夜福利在线观看免费| 亚洲婷婷开心色四房播播| 国产超碰在线观看免费| 精品国产av一区二区三区不卡蜜| 日本精品理论在线观看| 精品国自产拍天天青青草原| 五月婷婷六月丁香在线观看| 亚洲最大的中文字幕在线视频| 黄片免费播放一区二区| 在线观看日韩欧美综合黄片| 99在线视频精品免费播放| 国产不卡一区二区四区| 福利一区二区视频在线| 国产成人精品一区二三区在线观看| 五月综合婷婷在线伊人| 久久99青青精品免费| 亚洲av日韩一区二区三区四区 |