共用方式為


Windows 通訊端:使用類別 CAsyncSocket

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

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

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

此文章涵蓋:

建立和使用 CAsyncSocket

使用 CAsyncSocket

  1. CAsyncSocket建構 物件,並使用 物件來建立基礎 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. 呼叫 CAsyncSocket 封裝 Windows Sockets API 函式的物件成員函式,以與其他通訊端進行通訊。

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

  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 Sockets