Windows 套接字:套接字通知
本文介绍套接字类中的通知函数。 这些成员函数是回调函数,框架调用它们来将重要事件通知给套接字对象。 通知函数包括:
OnConnect:通知此连接套接字,让它知道其连接尝试已完成(可能成功,也可能出错)。
OnClose:通知此套接字它连接到的套接字已关闭。
注意
另一个通知函数是 OnOutOfBandData。 此通知告知接收套接字,让它知道发送套接字具有要发送的“带外”数据。 带外数据是一个逻辑上独立的通道,它与每对已连接的流套接字关联。 带外通道通常用于发送“紧急”数据。 MFC 支持带外数据。 使用 CAsyncSocket 类的高级用户可能需要使用带外通道,但不建议 CSocket 类的用户使用它。 最简单的方法是创建另一个用于传递此类数据的套接字。 有关带外数据的详细信息,请参阅 Windows SDK 中提供的 Windows 套接字规范。
如果派生自 CAsyncSocket
类,则必须覆盖应用程序感兴趣的这些网络事件的通知函数。 如果从 CSocket
类派生一个类,则可选择是否替代感兴趣的通知函数。 还可使用 CSocket
自身,在这种情况下,通知函数默认不执行任何操作。
这些函数是可替代的回调函数。 CAsyncSocket
和 CSocket
将消息转换为通知,但是如果需要使用通知,则必须实现通知函数的响应方式。 将感兴趣的事件(例如存在要读取的数据)通知给套接字时,会调用通知函数。
MFC 会调用通知函数,让你能够在套接字收到通知时自定义套接字的行为。 例如,你可从 OnReceive
通知函数调用 Receive
,也就是说,在收到有数据可读取的通知时,调用 Receive
来读取该数据。 此方法不是必需的,但它是一种有效的方案。 或者,可使用通知函数来跟踪进度、打印 TRACE 消息等。
可通过替代派生套接字类中的通知函数并提供实现来利用这些通知。
在接收或发送数据等操作期间,CSocket
对象会变为同步状态。 在同步状态下,用于其他套接字的任何通知都会排队,而当前套接字会等待所需的通知。 (例如,在 Receive
调用期间,套接字需要一个通知来读取。)套接字完成同步操作并再次变为异步时,其他套接字可开始接收已排队的通知。
注意
在 CSocket
中,从不调用 OnConnect
通知函数。 对于连接,请调用 Connect
,它会在连接完成时(不管是成功还是出错)返回信息。 如何处理连接通知取决于 MFC 实现细节。
有关每个通知函数的详细信息,请查看 MFC 参考中 CAsyncSocket
类下的函数。 有关 MFC 示例的源代码和信息,请参阅 MFC 示例。
有关详细信息,请参阅: