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
使用 CAsyncSocket
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 通訊端:埠和通訊端位址 中 說明。
如果通訊端是用戶端,請使用
CAsyncSocket::Connect
將通訊端物件連接到伺服器通訊端。-或-
如果通訊端是伺服器,請將通訊端設定為開始接聽 ,
CAsyncSocket::Listen
以從用戶端進行連線嘗試。 收到連接要求後,請使用 接受CAsyncSocket::Accept
它。接受連線之後,您可以執行驗證密碼等工作。
注意
成員
Accept
函式會採用對新的空白CSocket
物件做為其參數的參考。 您必須先建構這個物件,才能呼叫Accept
。 如果這個通訊端物件超出範圍,連接就會關閉。 請勿呼叫Create
這個新的通訊端物件。 如需範例,請參閱 Windows 通訊端:作業 順序一文 。呼叫
CAsyncSocket
封裝 Windows Sockets API 函式的物件成員函式,以與其他通訊端進行通訊。請參閱 MFC 參考 中的 Windows Sockets 規格和類別
CAsyncSocket
。CAsyncSocket
終結 物件。如果您在堆疊上建立通訊端物件,則會在包含函式超出範圍時呼叫其解構函式。 如果您在堆積上建立通訊端物件,請使用
new
運算子,您必須負責使用delete
運算子終結物件。解構函式會在終結物件之前呼叫物件的
Close
成員函式。
如需程式碼中這個序列的範例(實際上適用于 CSocket
物件),請參閱 Windows Sockets:Operations 序列。
您的責任 CAsyncSocket
當您建立 類別 CAsyncSocket
的物件時,物件會封裝 Windows SOCKET
控制碼,並在該控制碼上提供作業。 當您使用 CAsyncSocket
時,您必須直接使用 API 來處理可能遇到的所有問題。 例如:
「封鎖」案例。
傳送和接收電腦之間的位元組順序差異。
在 Unicode 與多位元組字元集 (MBCS) 字串之間轉換。
如需這些詞彙的定義和其他資訊,請參閱 Windows 通訊端:封鎖 、 Windows 通訊端:位元組排序 、 Windows 通訊端:轉換字串 。
儘管有這些問題,但如果您的應用程式需要您取得的所有彈性和控制,類別 CAsyncSocket
可能是您正確的選擇。 如果沒有,請考慮改用 類別 CSocket
。 CSocket
隱藏您的許多詳細資料:它會在封鎖呼叫期間泵送 Windows 訊息,並讓您存取 CArchive
,這會為您管理位元組順序差異和字串轉換。
如需詳細資訊,請參閱