Windows 通訊端: 使用通訊端的保存檔
本篇文章將探討 CSocket 程式撰寫模型。 類別 CSocket 類別一樣,提供更高層級的抽象的通訊端支援 CAsyncSocket。 CSocket要傳遞到 MFC 通訊端物件的資料會使用 MFC 序列化通訊協定版本 CArchive 物件。 CSocket提供封鎖 (同時管理的幕後處理 Windows 訊息),並可讓您存取以CArchive,它會管理各方面進行的通訊,您就必須使用 [原始] API 或類別自己動手CAsyncSocket。
提示
您可以使用類別CSocket本身就變得更方便的版本為CAsyncSocket,但是最簡單的程式撰寫模型就是使用CSocket與CArchive物件。
如需有關如何使用封存的通訊端的實作的運作方式的詳細資訊,請參閱Windows 通訊端: 通訊端的保存檔的運作方式。 比方說撰寫程式碼,請參閱作業的順序的 Windows 通訊端:和通訊端使用保存檔的 Windows 通訊端: 範例。 部分功能有關的資訊便可以藉由從通訊端類別衍生您自己的類別,請參閱從通訊端類別衍生的 Windows 通訊端:。
注意事項 |
---|
如果您正在撰寫與已建立的 (非 MFC) 伺服器通訊的 MFC 用戶端程式,不要傳送經由封存的 C++ 物件。除非伺服程式是瞭解您想要傳送的物件類型的 MFC 應用程式,則它將無法接收和還原序列化程式的物件。與非 MFC 應用程式通訊的主題相關的材料,請參閱文章Windows 通訊端: 位元組的順序。 |
CSocket 程式撰寫模型
使用CSocket物件牽涉到建立及關聯在一起的數個 MFC 類別的物件。 在 [一般以下程序,每一個步驟不會執行由伺服程式通訊端和用戶端通訊端,除了的步驟 3,在其中每個通訊端類型需要不同的動作。
提示
在執行階段,伺服器應用程式通常會是第一個準備好並且 「 聆聽 」 時用戶端應用程式會搜尋連接。如果伺服器尚未就緒,用戶端嘗試連線時,您通常會要求使用者應用程式,稍後再嘗試連線。
若要設定伺服程式通訊端和用戶端通訊端之間的通訊
建構 CSocket 物件。
使用物件來建立基礎通訊端處理。
對於CSocket用戶端物件時,您一般應該使用預設參數,以建立,除非您需要資料包通訊端。 對於CSocket伺服器物件,您必須指定一個連接埠,在建立呼叫。
注意事項 CArchive無法與資料包通訊端。如果您想要使用CSocket的資料包通訊端,您必須使用類別與使用CAsyncSocket,也就是沒有封存檔。因為資料包是不穩定 (不保證到達並且可能會重複或脫序),彼此不相容透過保存的序列化。您希望序列化作業可靠並且按順序完成。如果您嘗試使用CSocket與CArchive物件的資料包,MFC 判斷提示就會失敗。
如果用戶端通訊端,呼叫CAsyncSocket::Connect伺服程式通訊端連接通訊端物件。
-或-
如果通訊端是伺服器,呼叫CAsyncSocket::Listen開始接聽用戶端連線嘗試。 在收到連線要求時,接受它藉由呼叫CAsyncSocket::Accept。
注意事項 接受成員函式接受參考新的空白CSocket做為參數的物件。您必須建構這個物件,您是在呼叫接受。如果這個通訊端物件超出範圍,則會關閉連線。不會呼叫建立為這個新的通訊端物件。
建立 CSocketFile 物件時,將相關聯CSocket與它的物件。
建立 CArchive 載入 (接收) 或儲存 (傳送) 資料物件。 封存與相關的CSocketFile物件。
請注意, CArchive不適用於資料包通訊端。
使用CArchive用戶端和伺服器通訊端之間傳遞資料的物件。
請注意,指定CArchive的物件只在單向移動資料: 以載入 (接收) 或儲存 (傳送)。 在某些情況下,您將會使用兩個CArchive物件: 一個用來傳送資料,另一個則用於接收通知。
在接受連線,並設定封存,您可以執行像確認密碼等工作。
摧毀封存、 通訊端檔和通訊端物件。
注意事項 類別CArchive提供IsBufferEmpty專門用於類別成員函式CSocket。如果暫存區涵蓋多重資料訊息,比方說,您需要執行迴圈,直到全部都讀取及清除緩衝區。否則,您是要接收資料的下一個告知會無限延期。使用IsBufferEmpty來確保您擷取所有資料。
發行項作業的順序的 Windows 通訊端:會說明這個程序和範例程式碼的兩面。
如需詳細資訊,請參閱: