Windows 通訊端: 使用類別 CAsyncSocket
本文件說明如何使用類別 CAsyncSocket。 請注意這個類別會封裝 Windows 通訊端 API 很低的層級。 CAsyncSocket適用於由程式設計人員瞭解詳細的網路通訊,但要回呼的方便性,不論網路事件的告知。 根據這個假設,本文會提供基本的指令。 您可能應該考慮使用CAsyncSocket如果您想要 Windows 通訊端的簡易的事宜,降低在 MFC 應用程式中的多個網路通訊協定,但不是想要犧牲彈性。 您也可能覺得可以直接比您可以使用類別的常用更為通用模型程式設計更多的通訊,以取得較好的效率CSocket。
CAsyncSocket已記錄在 MFC 參考手冊 》。 Visual C++ 也會提供 Windows 通訊端規格中,位於Windows SDK。 細節留給您。 Visual C++ 不提供範例應用程式的CAsyncSocket。
如果您不是非常瞭解網路通訊,而且想要一個簡單的解決方案,使用類別 CSocket 與CArchive物件。 請參閱 Windows 通訊端: 使用通訊端,以保存檔如需詳細資訊。
這份文件內容包括:
建立和使用CAsyncSocket物件。
您的責任與 CAsyncSocket。
建立和使用 CAsyncSocket 物件
若要使用 CAsyncSocket
建構 CAsyncSocket 物件,並使用物件來建立基礎通訊端處理。
通訊端的建立遵循 MFC 模式的兩階式建構。
例如:
CAsyncSocket sock; sock.Create( ); // Use the default parameters
-或-
CAsyncSocket* pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create( nPort, SOCK_DGRAM );
上述第一個建構函式會建立CAsyncSocket在堆疊上的物件。 第二個建構函式會建立CAsyncSocket在堆積上。 第一個建立呼叫上述建立資料流通訊端會使用預設參數。 第二個建立呼叫會建立具有指定的連接埠和位址的資料包通訊端。 (您可以使用任何一種建立的版本與任何一種建構方法。)
參數,以建立是:
「 連接埠 」: 短整數。
伺服程式通訊端,您必須指定一個連接埠。 用戶端通訊端,您通常接受預設值,這個參數,它可讓 Windows 通訊端選取一個連接埠。
通訊端類型: SOCK_STREAM (預設值) 或 SOCK_DGRAM。
通訊端 「 位址 」 例如"ftp.microsoft.com"或"128.56.22.8"。
這是您網路上的網際網路通訊協定 (IP) 位址。 您可能永遠都要依靠此參數的預設值。
術語 「 連接埠 」 和 「 通訊端位址 」 會說明 Windows 通訊端: 連接埠和通訊端位址。
如果用戶端通訊端,通訊端物件連接到伺服器通訊端,使用 CAsyncSocket::Connect。
-或-
如果通訊端伺服器,請設定要開始接聽通訊端 (與 CAsyncSocket::Listen) 用於從用戶端的連線嘗試。 在收到連線要求時,接受它與 CAsyncSocket::Accept。
接受連接之後, 您可以執行像確認密碼等工作。
注意事項 接受成員函式接受參考新的空白CSocket做為參數的物件。您必須建構這個物件,您是在呼叫接受。如果這個通訊端物件超出範圍,則會關閉連線。不會呼叫建立為這個新的通訊端物件。如需範例,請參閱文章 Windows 通訊端: 序列的作業。
實行與另一個通訊端的通訊,藉由呼叫CAsyncSocket封裝 Windows 通訊端 API 函式的物件的成員函式。
請參閱 Windows 通訊端規格和類別 CAsyncSocket 在 MFC 參考手冊 》。
摧毀CAsyncSocket物件。
如果您是在堆疊上建立通訊端物件,包含函式已經超出範圍時會呼叫其解構函式。 如果您在堆積上建立通訊端物件,請使用新 運算子,您便需要使用 刪除運算子來終結物件。
解構函式會呼叫物件的關閉成員函式終結物件之前。
如需範例,此程式碼中的順序 (實際上為CSocket物件),請參閱 Windows 通訊端: 序列的作業。
您的責任與 CAsyncSocket
當您建立的物件類別的 CAsyncSocket,物件封裝 Windows 通訊端處理,並提供給該控點上的作業。 當您使用CAsyncSocket,您必須處理所有如果直接使用 API,您可能面對的問題。 例如:
「 封鎖 」 案例。
傳送和接收電腦之間的位元組順序差異。
Unicode 及多位元組字元間的轉換設定 (MBCS) 字串。
如需定義的詞彙和其他資訊,請參閱 Windows 通訊端: 封鎖, Windows 通訊端: 位元組的順序, Windows 通訊端: 轉換字串。
這些問題,儘管類別 CAsycnSocket 可能為您是正確的選擇,如果應用程式所需的所有彈性和控制,就可以。 如果不是,您應該考慮使用類別CSocket相反的。 CSocket隱藏詳細資料,您很多: 它 pumps 時封鎖呼叫,而且可讓您存取的 Windows 訊息CArchive,而管理有位元組順序差異和字串轉換為您。
如需詳細資訊,請參閱: