国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Windows Sockets:使用 CAsyncSocket 類

2019-11-17 05:27:24
字體:
來源:轉載
供稿:網友
本文介紹 CAsyncSocket 類的用法。請注重,該類在非常低的級別上封裝 Windows Sockets API。 CAsyncSocket 適合那些對網絡通信細節很了解,但希望利用回調的便利通知網絡事件的程序員使用。基于該假定,本文僅提供基本說明。假如想利用 Windows Sockets 方便地處理 MFC 應用程序中的多個網絡協議,而又不想放棄靈活性,可以考慮使用 CAsyncSocket 。您可能也會感覺到,自己直接編寫通信程序要比使用 CSocket 類的通用替換模型效果更好。 “MFC 參考”中對 CAsyncSocket 進行了描述。Visual C++ 也提供了位于 Platform SDK 中的 Windows Sockets 規范。具體細節由您決定。Visual C++ 不提供 CAsyncSocket 的示例應用程序。 假如您對網絡通信不是很了解,希望獲得一個簡單的解決方案,請使用帶 CArchive 對象的 CSocket 類。有關更多信息,請參見 Windows Sockets:使用帶存檔的套接字。 本文包括:
  • 創建和使用 CAsyncSocket 對象。
  • 您具有的 CAsyncSocket 責任。
創建和使用 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 的參數有:
    • “端口”:短整型。 對于服務器套接字,必須指定端口。對于客戶端套接字,通常接受此參數的默認值,該值答應 Windows Sockets 選擇端口。
    • 套接字類型: SOCK_STREAM (默認值)或 SOCK_DGRAM 。
    • 套接字“地址”,如“FTP.microsoft.com”或“128.56.22.8”。 該地址為網絡上的網際協議 (ip) 地址。很可能要始終依靠此參數的默認值。
    關于術語“端口”和“套接字地址”的解釋見 Windows Sockets:端口和套接字地址。
  2. 假如套接字是客戶端,則使用 CAsyncSocket::Connect 將此套接字對象連接到服務器套接字。 - 或 - 假如套接字是服務器,則將套接字設置為開始偵聽(使用 CAsyncSocket::Listen)來自客戶端的連接嘗試。接收到連接請求時,用 CAsyncSocket::Accept 接受該請求。 接受連接后,可以執行驗證密碼等任務。
    注重 Accept 成員函數采用對新的空 CSocket 對象的引用作為它的參數。在調用 Accept 之前,必須構造該對象。假如此套接字對象超出范圍,則連接關閉。不要對這個新套接字對象調用 Create 。有關示例,請參見文章 Windows Sockets:操作順序。
  3. 通過調用 CAsyncSocket 對象的封裝 Windows Sockets API 函數的成員函數,與其他套接字進行通信。 請參見“MFC 參考”中的 Windows Sockets 規范和 CAsyncSocket 類。
  4. 銷毀 CAsyncSocket 對象。 假如在堆棧上創建了套接字對象,當包含函數超出范圍時將調用此對象的析構函數。假如使用 new 運算符在堆上創建了套接字對象,則您必須負責使用 delete 運算符銷毀此對象。 析構函數在銷毀對象之前調用對象的 Close 成員函數。
有關代碼中該順序的示例(實際上是對于 CSocket 對象),請參見 Windows Sockets:操作順序。您對 CAsyncSocket 的責任 創建 CAsyncSocket 類的對象后,該對象封裝 Windows SOCKET 句柄并提供對此句柄的操作。使用 CAsyncSocket 時,假如您直接使用 API,則必須處理可能面對的所有問題。例如:
  • “阻塞”方案。
  • 發送和接收計算機之間的字節順序差異。
  • 在 Unicode 和多字節字符集 (MBCS) 字符串之間轉換。
有關這些術語的定義和其他信息,請參見 Windows Sockets:阻塞、Windows Sockets:字節排序和 Windows Sockets:轉換字符串。 盡管存在這些問題,但假如應用程序需要您能獲得所有的靈活性和控制能力, CAsycnSocket 類可能是正確的選擇。假如應用程序沒有這種需求,可考慮使用 CSocket 類。 CSocket 向您隱藏大量具體信息:它在阻塞調用期間抽取 Windows 消息并賦予您訪問 CArchive 的權限,而 CArchive 為您治理字節順序差異和字符串轉換。 有關更多信息,請參見:

    Windows Sockets:背景知識 Windows Sockets:流式套接字 Windows Sockets:數據文報套接字
       


上一篇:makefile寫法

下一篇:C++ 虛基類

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 工布江达县| 准格尔旗| 蓝山县| 广州市| 寿宁县| 浑源县| 日喀则市| 邢台市| 密山市| 青冈县| 景德镇市| 绩溪县| 台安县| 和硕县| 兴业县| 尤溪县| 台湾省| 东阿县| 义乌市| 台南市| 普洱| 沁阳市| 玛多县| 寻乌县| 海晏县| 浦江县| 南靖县| 镇江市| 嘉善县| 焦作市| 民县| 辛集市| 阜城县| 新平| 莫力| 德江县| 涡阳县| 庆阳市| 东阳市| 玉山县| 洱源县|