本文描述套接字類中的通知函數。這些成員函數都是回調函數,框架調用它們將重要事件通知給套接字對象。通知函數有:
注意: 一個附加的通知函數是 OnOutOfBandData。此通知告訴接收套接字發送套接字有“帶外”數據要發送。帶外數據是邏輯上獨立的通道,與每一對已連接的流式套接字關聯。帶外通道通常用於發送“緊急”數據。MFC 支持帶外數據。使用 CAsyncSocket 類的高級用戶可能需要使用帶外通道,但 CSocket 類的用戶最好不要使用它。更簡便的方法是創建另一個套接字來傳遞這種數據。有關帶外數據的更多信息,請參見 Platform SDK 中的 Windows Sockets 規范。
如果從 CAsyncSocket 類派生類,則必須為應用程序感興趣的網絡事件重寫通知函數。如果從 CSocket 類派生類,則可以選擇是否重寫感興趣的通知函數。也可以使用 CSocket 自身,在此情況下,通知函數默認不執行任何操作。
這些函數都是可重寫的回調函數。 CAsyncSocket 和 CSocket 將消息轉換成通知,但如果希望使用通知函數,則必須實現它們的響應方式。當套接字被通知有感興趣的事件(如存在要讀取的數據)時,調用通知函數。
MFC 調用通知函數以允許您在套接字被通知時自定義其行為。例如,您可能從 OnReceive 通知函數調用 Receive ,即,當獲得有要讀取的數據的通知時,可調用 Receive 讀取該數據。這種方法不是必需的,但它是一個有效的方案。另一種辦法是,可以使用通知函數來跟蹤進度、打印 TRACE 消息等。
可以通過在派生的套接字類中重寫通知函數並提供實現來利用這些通知。有關實現示例,請參見 MFC 示例 CHATTER 和 CHATSRVR 中的通知函數重寫。
在如接收或發送數據的操作過程中, CSocket 對象變為同步。在同步狀態中,當前套接字等待它想要的通知的同時,對應其他套接字的通知都排隊等候。(例如,在 Receive 調用過程中,套接字想要讀取通知)。一旦套接字完成其同步操作並再次變為異步時,其他套接字才能開始接收排隊的通知。
注意: 在 CSocket 中,永遠都不調用 OnConnect 通知函數。對於連接,則調用 Connect ,它將在連接完成時返回(成功或者錯誤)。如何處理連接通知是 MFC 實現的細節。
有關每個通知函數的詳細信息,請參見“MFC 參考”中 CAsyncSocket 類下的該函數。有關 MFC 示例的源代碼和信息,請參見 MFC 示例。
有關更多信息,請參見: