共用方式為


Windows Sockets:搭配使用通訊端與封存

本文說明 CSocket 程式設計模型。 CSocket 類別會將 CAsyncSocket提供通訊端在較高層級的抽象支援。 CSocket 使用 MFC 序列化通訊協定版本來回通訊端物件傳遞資料 MFC CArchive 物件。 CSocket 提供封鎖 (當處理背景處理視窗訊息) 可讓您對 CArchive的存取,處理通訊的許多方面必須做自己使用原始應用程式開發介面或類別 CAsyncSocket

提示

您可以單獨使用類別 CSocket ,做為 CAsyncSocket更方便的版本,不過,最簡單的程式設計模型是以 CArchive 物件的 CSocket

如需通訊端的實作有封存的運作方式的詳細資訊,請參閱 Windows Sockets:如何搭配使用通訊端與封存。 如需範例程式碼,請參閱Windows Sockets:作業順序Windows Sockets:使用封存的通訊端範例。 如需您可以衍生您的類別取得通訊端類別的某些功能的詳細資訊,請參閱 Windows Sockets:從通訊端類別衍生

注意事項注意事項

如果您正在撰寫一個 MFC 用戶端程式建立的 (非 MFC) 伺服器通訊,請勿將封存傳送 C++ 物件。除非伺服器是了解這種物件的 MFC 應用程式要傳送,無法接收和序列化您的物件。如需通訊的相關資料與非 MFC 應用程式,請參閱本文件的 Windows Sockets:位元組順序

CSocket 程式設計模型

使用 CSocket 物件包含一起建立和關聯的 MFC 類別物件。 在下列的一般程序,每一個步驟是由伺服器通訊端與用戶端通訊端接受,除了步驟 3 中,每個通訊端類型需要一個動作。

提示

在執行階段,當用戶端應用程式尋找連接時,伺服器應用程式通常會先開始準備好和「接聽」。如果伺服器未就緒,當用戶端嘗試連接時,您通常需要使用者應用程式設定來嘗試重新連接。

設定伺服器通訊端與用戶端通訊端之間的通訊。

  1. 建構 CSocket 物件。

  2. 使用物件建立基本的 SOCKET 控制代碼。

    對於 CSocket 用戶端物件,除非必要,資料包通訊端,通常應該使用預設參數至 Create。 對於 CSocket 伺服器物件,您必須可以在 Create 呼叫指定通訊埠。

    注意事項注意事項

    CArchive 不是使用資料包通訊端一起使用。如果您要為資料包通訊端使用 CSocket ,您必須使用類別,就像使用 CAsyncSocket,也就是,不會保存。由於資料包不可靠 (不保證達到和可能會重複或不依順序),它們無法透過封存與序列化相容。您預期的序列化作業正常且依順序完成。如果您嘗試為資料包搭配 CArchive 物件的 CSocket , MFC 判斷提示就會失敗。

  3. 如果通訊是用戶端,呼叫連接至伺服器通訊端的通訊端物件的 CAsyncSocket::Connect

    -或-

    如果通訊是伺服器,呼叫啟動的 CAsyncSocket::Listen 接聽連接從用戶端嘗試。 當接收到連接要求後,請呼叫 CAsyncSocket::Accept 來接受它。

    注意事項注意事項

    Accept 成員函式會取得新的,空的 CSocket 物件的參考做為它的參數。在您呼叫 Accept之前,您必須建構此物件。如果這個通訊端物件超出範圍,關閉連接。不要呼叫這個新物件的通訊端 Create

  4. 建立 CSocketFile 物件,使 CSocket 物件產生關聯。

  5. 建立載入 (接收) 或儲存 (傳送) 資料的 CArchive 物件。 此文件與CSocketFile物件相關聯。

    記住 CArchive 不和資料包通訊端一起使用。

  6. 使用傳遞資料的 CArchive 物件在用戶端和伺服器通訊端之間。

    注意特定 CArchive 物件只會移動某一方向的資料:用於載入 (接收) 或儲存 (傳送)。 在某些情況下,您會使用兩個 CArchive 物件:傳送的資料,其他接收的通知。

    在接受連線和設定封存以後,您可以執行這類工作與驗證密碼。

  7. 終結封存、通訊端檔案和通訊端物件。

    注意事項注意事項

    明確地將 CArchive 提供 IsBufferEmpty 類別的成員函式與類別一起使用的 CSocket。例如,如果緩衝區包含多個資料訊息需要執行迴圈,直到所有讀取,並清除緩衝區。否則,您的下個通知接收的資料可能會無限期地延遲。使用 IsBufferEmpty 以擷取所有資料。

Windows Sockets:作業順序 文件說明此處理序與範例程式碼的兩方。

如需詳細資訊,請參閱:

請參閱

參考

CSocket::Create

概念

MFC 中的 Windows Sockets