程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Socket類中提供的支持異步操作的方法(2)

Socket類中提供的支持異步操作的方法(2)

編輯:關於C語言

具體用法如下所示。

private AsyncCallback callbackOnAccpt; //定制回調方法

private Socket s;

……

s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

callbackAccpt = new AsyncCallback(this.OnAccept); //實例化回調方法

s.BeginAccept(callbackOnAccpt, this.s); //開始異步請求

……

private void OnAccept(IAsyncResult asynresult)

{

……

s.EndAccept(asynresult); //結束異步請求

……

}

BeginConnect()和EndConnect()用於對遠程主機的異步連接請求。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);

public IAsyncResult BeginConnect(string host,int port,AsyncCallback requestedcallback,object state);

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

EndConnect()的聲明如下所示。

public Socket EndConnect(IAsyncResult asynresult);

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

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

public IAsyncResult BeginSend(byte[] buffer,int offset,int size,SocketFlags socketFlags,

AsyncCallback callback,object state);

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

EndSend()的聲明如下所示。

public Socket EndSend(IAsyncResult asynresult);

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

public IAsyncResult BeginReceive(byte[] buffer,int offset,int size,SocketFlags socketFlags,

AsyncCallback callback,object state);

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

EndReceive()的聲明如下所示。

public Socket EndReceive(IAsyncResult asynresult);

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved