成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#異步通信概念及應用淺析

開發 后端
C#異步通信概念及應用主要向你介紹了C#異步通信的實現方法和操作的具體的實現方法,希望對你理解和學習C#異步通信有所幫助。

C#異步通信概念及應用的認識首先讓我們來看看:在網絡編程中運用Socket,常常需要長期監聽某個端口,以獲得Socket連接,進而執行相關操作。

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

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

   

   

BeginAccept()

開始一個異步請求,以創建一個新的Socket對象來接受傳入的連接請求

EndAccept()

結束一個異步請求,以創建一個新的Socket對象來接受傳入的連接請求

BeginConnect()

開始一個對遠程主機的異步請求

EndConnect()

結束一個對遠程主機的異步請求

BeginDisconnect()

開始異步請求從遠程主機斷開連接

EndDisconnect()

結束從遠程主機斷開連接的異步請求

BeginReceive()

開始從連接的Socket中異步接收數據

EndReceive()

結束從連接的Socket中異步接收數據

BeginReceiveFrom()

開始從指定網絡設備中異步接收數據

EndReceiveFrom()

結束從指定網絡設備中異步接收數據

BeginSend()

開始將數據異步發送到連接的Socket

EndSend()

結束數據的異步發送

BeginSendFile()

開始將文件異步發送到連接的Socket

EndSendFile()

結束文件的異步發送

BeginSendTo()

向特定的遠程主機異步發送數據

EndSendTo()

結束對遠程主機數據的異步發送

從上表中可以看出,這些方法都是成對出現的。這些方法能避免網絡通信中的阻塞現象。這些方法的使用機制是在Begin開頭的方法中注冊一個回調函數,當對應的事件發生時,調用該回調函數,且在回調函數中調用對應的End開頭的方法。

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

  1. public IAsyncResult BeginAccept(AsynCallback callback,  
  2. object state); 

其中,***個參數是異步委托AsynCallb了ack,state包含此請求的狀態信息的對象。

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

  1. public Socket EndAccept(IAsyncResult asynresult);  
  2.  
  3. public Socket EndAccept(out byte[] buffer,  
  4. IAsyncResult asynresult);  
  5.  
  6. public Socket EndAccept(out byte[] buffer,  
  7. out int bytesTransferred, IAsyncResult asynresult,);  

asynresult用于存儲此異步操作的狀態信息及任何用戶定義的數據;buffer表示需要傳輸的字節數據;

bytesTransferred表示已經傳輸的字節數。這里的out參數與ref的用法類似,均表示傳遞引用。它們的區別是ref是傳遞參數的地址,out是返回值。

具體用法如下所示。

  1. private AsyncCallback callbackOnAccpt; //定制回調方法  
  2.  
  3. private Socket s;  
  4.  
  5. ……  //C#異步通信
  6.  
  7. s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);  
  8.  
  9. callbackAccpt = new AsyncCallback(this.OnAccept);//實例化回調方法  
  10.  
  11. s.BeginAccept(callbackOnAccpt, this.s); //開始異步請求  
  12.  
  13. ……  
  14.  
  15. private void OnAccept(IAsyncResult asynresult)  
  16.  
  17. {  
  18.  //C#異步通信
  19. ……  
  20.  
  21. s.EndAccept(asynresult); //結束異步請求  
  22.  
  23. ……  
  24.  
  25. }  

BeginConnect()和EndConnect()用于對遠程主機的異步連接請求。BeginConnect()的聲明如下所示。

  1. public IAsyncResult BeginConnect(EndPoint remoteEP,  
  2. AsyncCallback callback, object state);  
  3.  
  4. public IAsyncResult BeginConnect(IPAddress address,  
  5. int port,AsyncCallback requestedcallback,object state);  
  6.  
  7. public IAsyncResult BeginConnect(IPAddress[] address,  
  8. int port,AsyncCallback requestedcallback,object state);  
  9.  //C#異步通信
  10. public IAsyncResult BeginConnect(string host,int port,  
  11. AsyncCallback requestedcallback,object state);  

它的每個重載形式均含有AsyncCallback參數,這是這類Begin開頭的方法的特點;remoteEP表示遠程主機的IP和端口。

EndConnect()的聲明如下所示。

public Socket EndConnect(IAsyncResult asynresult);

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

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

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

Buffer表示要發送的數據,offset表示buffer中發送數據的位置,size為發送字節數的大小,socketFlags指SocketFlags值的按位組合。

EndSend()的聲明如下所示。

  1. public Socket EndSend(IAsyncResult asynresult); 

BeginReceive()表示開始從連接的Socket中異步接收數據,它的常見聲明如下所示。

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

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

EndReceive()的聲明如下所示。

  1. public Socket EndReceive(IAsyncResult asynresult); 

C#異步通信之Socket中異步通信的實現要遠比同步困難,這里不再舉例。簡單地說,在同步中,主線程如果調用一個方法,那么主線程必須等到方法線程執行完才能繼續往下執行。因此,主線程和方法線程的執行是串行的。而在異步中,兩者能同時執行,它們的執行是并行的。

C#異步通信的相關內容就向你介紹到這里,希望對你了解和學習C#異步通信有所幫助。

【編輯推薦】

  1. C# Socket異步通訊實現詳解
  2. C#異步編程模式IAsyncResult淺析
  3. 基于事件的C#異步編程模式淺析
  4. 對委托在C#異步委托和多線程中的理解
  5. C#異步委托之委托使用的時機淺析
責任編輯:仲衡 來源: 百度空間
相關推薦

2009-08-18 09:51:18

C#枚舉類型

2009-08-24 17:39:21

C# 泛型集合

2009-09-09 16:46:59

C# XmlSeria

2009-08-24 15:28:19

C# 泛型方法

2009-08-20 19:08:30

C#異步調用

2009-09-01 16:10:28

C#單元測試

2009-08-17 13:34:02

C#異步操作

2009-08-27 10:20:03

C# foreach語

2009-08-28 16:48:50

C#多態性

2009-08-12 10:37:13

C#運算符重載

2009-09-04 16:37:37

C# DES算法

2009-07-31 09:32:04

ASP.NET緩存概念ASP.NET緩存應用

2009-09-14 13:44:14

Lambda ExprC# Lambda

2009-08-25 18:16:02

.NET Framew.NET Framew

2009-09-02 10:58:02

C#動態數組

2009-08-21 09:20:44

C#異步套接字

2009-08-20 17:30:56

C#異步編程模式

2009-08-27 17:11:44

C# Fluent I

2010-02-03 16:29:19

C++ sizeof

2009-08-17 17:49:20

C# 枚舉
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 看av网| 亚洲乱码国产乱码精品精的特点 | 国产91丝袜在线播放 | 亚洲精品九九 | 国产一级在线 | 免费观看色 | 中文字幕 欧美 日韩 | 正在播放国产精品 | 在线观看国产www | 亚洲成人精品 | 91免费电影 | 国产综合一区二区 | 久久鲁视频 | 黄色片免费在线观看 | 日韩av一区二区在线观看 | 九九热精品在线视频 | 成人亚洲精品久久久久软件 | 国产精品区二区三区日本 | 亚洲狠狠| 国产资源视频 | 国产在线精品一区二区 | 日韩中文字幕在线视频 | 999久久久久久久久6666 | 国产日韩av一区二区 | 亚洲综合一区二区三区 | 日韩一区欧美一区 | 精品成人免费一区二区在线播放 | 伊人久久免费视频 | 精品久久久久久久久久久下田 | 精品一区二区三区不卡 | 日韩欧美三区 | 国产一区二区在线视频 | 九九av| 一区二区三区电影网 | 午夜精品 | 亚洲三级av | 成人久久久 | 成人免费大片黄在线播放 | 欧美激情欧美激情在线五月 | 99在线精品视频 | 国产在线视频一区二区 |