Windows 套接字:套接字通知

本文介绍套接字类中的通知函数。 这些成员函数是框架调用的回调函数,用于通知套接字对象的重要事件。 通知函数包括:

  • OnReceive:通知此套接字缓冲区中存在数据,以便通过调用 Receive 进行检索。

  • OnSend:通知此套接字现在可以通过调用 Send 发送数据。

  • OnAccept:通知此侦听套接字,它可以通过调用 Accept 来接受挂起的连接请求。

  • OnConnect:通知此连接套接字其连接尝试已完成:可能是成功或出错。

  • OnClose:通知此套接字它连接到的套接字已关闭。

    注释

    另一个通知函数是 OnOutOfBandData。 此通知告知接收套接字发送套接字有要发送的“带外”数据。 带外数据是与每个连接的流套接字对关联的逻辑独立通道。 带外通道通常用于发送“紧急”数据。 MFC 支持带外数据。 使用 类 CAsyncSocket 的高级用户可能需要使用带外通道,但不建议使用 CSocket 类的用户。 最简单的方法是创建另一个用于传递此类数据的套接字。 有关带外数据的详细信息,请参阅 Windows SDK 中提供的 Windows 套接字规范。

如果派生自类 CAsyncSocket,则必须覆盖应用程序感兴趣的网络事件的通知函数。 如果从类 CSocket派生类,则选择是否替代感兴趣的通知函数。 还可以使用 CSocket 自身,在这种情况下,通知函数默认不执行任何作。

这些函数是可重写的回调函数。 CAsyncSocket 并将 CSocket 消息转换为通知,但如果你希望使用通知,则必须实现通知函数的响应方式。 在套接字收到相关事件的通知时调用通知函数,例如存在要读取的数据。

MFC 调用通知函数,让你在收到通知时自定义套接字的行为。 例如,可以从通知函数(即收到要读取数据的通知)调用ReceiveOnReceive时,调用Receive读取数据。 此方法不是必需的,但它是一个有效的方案。 或者,可以使用通知函数跟踪进度、打印 TRACE 消息等。

可以通过重写派生套接字类中的通知函数并提供实现来利用这些通知。

在接收或发送数据等作期间, CSocket 对象变为同步。 在同步状态下,用于其他套接字的任何通知在当前套接字等待所需的通知时排队。 (例如,在调用期间 Receive ,套接字需要通知读取。)套接字完成同步作并再次变为异步作后,其他套接字可以开始接收排队通知。

注释

CSocket 中,从不调用 OnConnect 通知函数。 对于连接,调用 Connect时将返回连接(成功或出错)。 如何处理连接通知取决于 MFC 实现细节。

有关每个通知函数的详细信息,请参阅 MFC 参考中的类CAsyncSocket下的函数。 有关 MFC 示例的源代码和信息,请参阅 MFC 示例

有关详细信息,请参见:

另请参阅

MFC 中的 Windows 套接字