共用方式為


Windows 套接字:使用類別 CAsyncSocket

本文說明如何使用 類別 CAsyncSocket。 這個類別會在非常低的層級封裝 Windows Sockets API。 CAsyncSocket 是供詳細瞭解網路通訊但想要方便回呼以通知網路事件的程式設計人員使用。 根據此假設,本文僅提供基本指示。 如果您想要讓 Windows Sockets 輕鬆地處理 MFC 應用程式中的多個網路協定,但不想犧牲彈性,建議您考慮使用 CAsyncSocket 。 你可能也覺得,比起使用類別CSocket的一般替代模型,透過更直接地自行編寫通訊程式,能夠獲得更佳的效率。

CAsyncSocket 記載於 MFC 參考中。 Visual C++也提供位於 Windows SDK 中的 Windows Sockets 規格。 細節將留給您。 Visual C++ 不提供 的 CAsyncSocket範例應用程式。

如果您對於網路通訊並想要簡單的解決方案不具高度知識,請使用 類別 CSocket 搭配 CArchive 物件。 如需詳細資訊,請參閱 Windows 套接字:使用套接字與封存

本文涵蓋:

建立和使用 CAsyncSocket

使用 CAsyncSocket

  1. 創建CAsyncSocket物件,並使用該物件來建立基礎SOCKET控制代碼。

    建立 Socket 會遵循 MFC 模式的兩階段建構。

    例如:

    CAsyncSocket sock;
    sock.Create(); // Use the default parameters
    

    -或-

    CAsyncSocket *pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create(nPort, SOCK_DGRAM);
    

    上述第一個 CAsyncSocket 建構函式會在堆疊上建立 物件。 第二個建構函式會在堆疊上建立CAsyncSocket。 上述第一個 Create 呼叫會使用預設參數來建立數據流套接字。 第二次 Create 呼叫會建立一個具有指定端口和地址的資料報套接字。 (您可以使用任一 Create 版本搭配任一種建構方法。)

    的參數 Create 如下:

    • “port”:一個短整數。

      您必須為伺服器套接字指定一個埠。 針對用戶端套接字,您通常會接受此參數的預設值,讓 Windows Sockets 選取埠。

    • 套接字型態: SOCK_STREAM (預設值) 或 SOCK_DGRAM

    • 套接字「位址」,例如 "ftp.microsoft.com""128.56.22.8"

      這是您網路上的因特網通訊協定 (IP) 位址。 您可能總是依賴此參數的預設值。

    「埠」和「套接字位址」一詞會在 Windows 套接字:埠和套接字地址中說明。

  2. 如果套接字是用戶端,請使用 CAsyncSocket::Connect將套接字對象連接到伺服器套接字。

    -或-

    如果套接字是伺服器,請將其設置為開始使用 CAsyncSocket::Listen 來接聽來自客戶端的連線嘗試。 當收到連接請求時,請使用CAsyncSocket::Accept接受。

    接受連線之後,您可以執行驗證密碼等工作。

    備註

    成員 Accept 函式會採用對新的空白 CSocket 物件做為其參數的參考。 您必須先建構這個物件,才能呼叫 Accept。 如果這個套接字物件超出作用域,連線就會關閉。 不要對這個新的套接字物件呼叫 Create。 如需範例,請參閱 Windows 套接字:作業順序一文。

  3. 透過呼叫封裝 Windows Sockets API 函式的 CAsyncSocket 對象的成員函式,與其他套接字進行通訊。

    請參閱 CAsyncSocket中的 Windows Sockets 規格和類別

  4. 摧毀CAsyncSocket物件。

    如果您在堆疊上建立套接字物件,則會在包含函式超出範圍時呼叫其解構函式。 如果您在堆積上建立套接字物件,請使用 new 運算符,您必須負責使用 delete 運算符銷毀物件。

    解構函式會在銷毀物件之前呼叫物件的Close 成員函式。

如需程式代碼中這個序列的範例(實際上適用於 CSocket 物件),請參閱 Windows Sockets:Operations 序列

您負責的事項 CAsyncSocket

當您建立 類別 CAsyncSocket的物件時,物件會封裝 Windows SOCKET 句柄,並在該句柄上提供作業。 當您使用 CAsyncSocket 時,您必須應對可能在直接使用 API 時會遇到的所有問題。 例如:

  • 「封鎖」情境。

  • 傳送和接收電腦之間的位元組順序差異。

  • 在 Unicode 與多位元組字元集 (MBCS) 字串之間轉換。

如需這些詞彙的定義和其他資訊,請參閱 Windows 套接字:封鎖Windows 套接字:位元組排序Windows 套接字:轉換字元串

儘管有這些問題,但如果您的應用程式需要您取得的所有彈性和控制,類別 CAsyncSocket 可能是您正確的選擇。 如果沒有,請考慮改用 類別 CSocketCSocket 隱藏您的許多詳細數據:它會在封鎖呼叫期間泵送 Windows 訊息,並讓您存取 CArchive,這會為您管理位元組順序差異和字串轉換。

如需詳細資訊,請參閱:

另請參閱

MFC 中的 Windows 套接字