Windows 套接字:套接字通知

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

  • OnReceive:通知此套接字,让它知道缓冲区中存在数据,可供它通过调用 Receive 进行检索。

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

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

  • OnConnect:通知此连接套接字,让它知道其连接尝试已完成(可能成功,也可能出错)。

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

    注意

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

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

这些函数是可替代的回调函数。 CAsyncSocketCSocket 将消息转换为通知,但是如果需要使用通知,则必须实现通知函数的响应方式。 将感兴趣的事件(例如存在要读取的数据)通知给套接字时,会调用通知函数。

MFC 会调用通知函数,让你能够在套接字收到通知时自定义套接字的行为。 例如,你可从 OnReceive 通知函数调用 Receive,也就是说,在收到有数据可读取的通知时,调用 Receive 来读取该数据。 此方法不是必需的,但它是一种有效的方案。 或者,可使用通知函数来跟踪进度、打印 TRACE 消息等。

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

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

注意

CSocket 中,从不调用 OnConnect 通知函数。 对于连接,请调用 Connect,它会在连接完成时(不管是成功还是出错)返回信息。 如何处理连接通知取决于 MFC 实现细节。

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

有关详细信息,请参阅:

另请参阅

MFC 中的 Windows 套接字