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

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

編輯:關於C語言

在網絡編程中運用Socket,常常需要長期監聽某個端口,以獲得Socket連接,進而執行相關操作。

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

表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()的聲明如下所示。

public IAsyncResult BeginAccept(AsynCallback callback,object state);

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

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用於存儲此異步操作的狀態信息及任何用戶定義的數據;buffer表示需要傳輸的字節數據;

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

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