我利用 利用 向导 生成了个以 CSocket 为基类的 派生类 CHHSocket
然后重载了 函数:
CHHSocket::OnClose( int n )
{
    AfxMessageBox( "close" );
}CHHSocket::OnSend( int n )
{
    AfxMessageBox( "send" );
}CHHSocket::OnRecive( int n )
{
    AfxMessageBox( "recv" );
}...........................我的程序里的 数据传送用了这个 CHHSocket  sock;
但我的程序里掉用了 sock.Send(....)
没有这个响应 AfxMessageBox( "send" );其他的也一样 关闭了 sock 
AfxMessageBox( "close" ); 不响应 就是 
根本没调用 这些 OnXXXX 函数如何才可以 让程序响应 这些 OnXXX 函数

解决方案 »

  1.   

    调用sock.Send,sock.Close是不会发出消息的。
    Windows的消息机制中无这东西。不过你可以在sock.Send之后PostMessage(hwnd, MsgClose, wParam, lParam)
    MsgClose 是你自定义的
      

  2.   

    晕, 楼上的是不是说错了OnClose, OnReceive等等所有的消息都会响应关键是, 楼主可能并没有建立一个连接, 仅仅只用了一个CHHSocket应该至少建立两个, 一个作服务端, 一个作客户端, 再建立连接, 那么以上所有事件都会响应了
      

  3.   

    、WinSock API 的MFC 封 装 类
    ---- 一 些 网 络 应 用 程 序( 如 网 络 电 话、 多 媒 体 会 议 工 具) 实 时 性 要 求 非 常 强, 要 求 能 够 直 接 应 用WinSock 发 送 和 接 收 数 据。 这 时 设 计 者 应 该 选 择 直 接 应 用WinSock API 或 者 由MFC 封 装 的WinSock API。 新 开 发 的 应 用 程 序 中, 为 了 充 分 利 用MFC 的 优 势, 首 选 方 案 应 当 是MFC 中 的CAsyncSocket 类 和CSocket 类, 这 两 个 类 完 全 封 装 了WinSock API, 并 提 供 更 多 的 便 利。 本 文 介 绍 应 用 这 两 个 类 的 编 程 模 型, 并 引 出 相 关 的 成 员 函 数 与 一 些 概 念 的 解 释。 
    ---- 1.CAsyncSocket 类 和CSocket 类 简 述 
     
    附 图 CAsyncSocket 类 和CSocket 类 的 继 承 关 系 ---- CAsyncSocket 类 和CSocket 类 的 继 承 关 系 由 附 图 给 出。CSocket 类 是 由CAsyncSocket 继 承 而 来 的, 事 实 上, 在MFC 中CAsyncSocket 逐 个 封 装 了WinSock API, 每 个CAsyncSocket 对 象 代 表 一 个Windows Socket, 使 用CAsyncSocket 类 要 求 程 序 员 对 网 络 编 程 较 为 熟 悉。 相 比 起 来,CSocket 类 是CAsyncSocket 的 派 生 类, 继 承 了 它 封 装 的WinSock API。 一 个CSocket 对 象 代 表 了 一 个 比CAsyncSocket 对 象 更 高 层 次 的Windows Socket 抽 象,CSocket 类 与CSocketFile 类 和CArchive 类 一 起 工 作 来 发 送 和 接 收 数 据, 因 此 使 用 它 更 加 容 易。CSocket 对 象 提 供 阻 塞 模 式, 因 为 阻 塞 功 能 对 于CArchive 的 同 步 操 作 是 至 关 重 要 的。 在 这 里 有 必 要 对 阻 塞 的 概 念 作 一 解 释: 一 个socket 可 以 处 于“ 阻 塞 模 式” 或“ 非 阻 塞 模 式”, 当 一 个 套 接 字 处 于 阻 塞 模 式( 即 同 步 操 作) 时, 它 的 阻 塞 函 数 直 到 操 作 完 成 才 会 返 回 控 制 权, 之 所 以 称 为 阻 塞 是 因 为 此 套 接 字 的 阻 塞 函 数 在 完 成 操 作 返 回 之 前 什 么 也 不 能 做。 如 果 一 个socket 处 于 非 阻 塞 模 式( 即 异 步 操 作), 则 会 被 调 用 函 数 立 即 返 回。 在CAsyncSocket 类 中 可 以 用GetLastError 成 员 函 数 查 询 最 后 的 错 误, 如 果 错 误 是WSAEWOULDBLOCK 则 说 明 有 阻 塞, 而CSocket 绝 不 会 返 回WSAEWOULDBLOCK, 因 为 它 自 己 管 理 阻 塞。 微 软 建 议 尽 量 使 用 非 阻 塞 模 式, 通 过 网 络 事 件 的 发 生 而 通 知 应 用 程 序 进 行 相 应 的 处 理。 但 在CSocket 类 中, 为 了 利 用CArchive 处 理 通 讯 中 的 许 多 问 题 和 简 化 编 程, 它 的 一 些 成 员 函 数 总 是 具 有 阻 塞 性 质 的, 这 是 因 为CArchive 类 需 要 同 步 的 操 作。 在Win32 环 境 下, 如 果 要 使 用 具 有 阻 塞 性 质 的 套 接 字, 应 该 放 在 独 立 的 工 人 线 程 中 处 理, 利 用 多 线 程 的 方 法 使 阻 塞 不 至 于 干 扰 其 他 线 程, 也 不 会 把CPU 时 间 浪 费 在 阻 塞 上。 多 线 程 的 方 法 既 可 以 使 程 序 员 享 受CSocket 带 来 的 简 化 编 程 的 便 利, 也 不 会 影 响 用 户 界 面 对 用 户 的 反 应。 ---- 2.CAsyncsocket 类 编 程 模 型 ---- 在 一 个MFC 应 用 程 序 中, 要 想 轻 松 处 理 多 个 网 络 协 议, 而 又 不 牺 牲 灵 活 性 时, 可 以 考 虑 使 用CAsyncSocket 类, 它 的 效 率 比CSocket 类 要 高。CAsyncSocket 类 针 对 字 节 流 型 套 接 字 的 编 程 模 型 简 述 如 下: ---- (1) 构 造 一 个CAsyncSocket 对 象, 并 用 这 个 对 象 的Create 成 员 函 数 产 生 一 个Socket 句 柄。 可 以 按 如 下 两 种 方 法 构 造: CAsyncSocket sock;
    Sock.Create(); 
    // 使 用 默 认 参 数 产 生 一 个 字 节 流 套 接 字

    CAsyncSocket*pSocket=new CAsyncSocket;
    int nPort=27;
    pSocket->Create(nPort, SOCK-DGRAM);
    // 指 定 端 口 号 产 生 一 个 数 据 报 套 接 字---- 第 一 种 方 法 在 栈 上 产 生 一 个CAsyncSocket 对 象, 而 第 二 种 方 法 在 堆 上 产 生CAsyncSocket 对 象。 第 一 种Create 成 员 函 数 用 缺 省 参 数 产 生 一 个 字 节 流 套 接 字, 第 二 种Create 成 员 函 数 用 指 定 的 端 口 和 地 址 产 生 一 个 数 字 报 套 接 字。Create 的 参 数 有: 
    ---- ① 端 口,UINT 类 型。 注 意: 如 果 是 服 务 方, 则 使 用 一 个 众 所 周 知 的 端 口 供 服 务 方 连 接; 如 果 是 客 户 方, 典 型 做 法 是 接 受 默 认 参 数, 使 套 接 字 可 以 自 主 选 择 一 个 可 用 端 口; ---- ②socket 类 型。SOCK-STREAM( 默 认 值) 或SOCK-DGRAM; ---- ③socket 地 址。 例 如“ftp.gliet.edu.cn” 或“202.193.64.33”。 ---- (2) 如 是 客 户 方 程 序, 用CAsyncSocket ∷Connect 成 员 函 数 连 接 到 服 务 方; 如 是 服 务 方 程 序, 用CAsyncSocket ∷Listen 成 员 函 数 开 始 监 听, 一 旦 收 到 连 接 请 求, 则 调 用CAsyncSocket ∷Accept 成 员 函 数 开 始 接 收。 注 意:CAsyncSocket ∷Accept 成 员 函 数 要 用 一 个 新 的 并 且 是 空 的CSocket 对 象 作 为 它 的 参 数, 这 里 所 说 的“ 空 的” 指 的 是 这 个 新 对 象 还 没 有 调 用Create 成 员 函 数。 ---- (3) 调 用 其 他 的CAsyncSocket 类 成 员 函 数 进 行 通 讯 管 理。 ---- (4) 通 讯 结 束 后, 销 毁CAsyncSocket 对 象。 如 果 是 在 栈 上 产 生 的CAsyncSocket 对 象, 则 对 象 超 出 定 义 的 范 围 时 自 动 被 析 构; 如 果 是 在 堆 上 产 生, 也 就 是 用 了new 这 个 操 作 符, 则 必 须 使 用delete 操 作 符 销 毁CAsyncSocket 对 象。 ---- 3.CSocket 类 编 程 模 型 ---- 使 用CSocket 对 象 涉 及CArchive 和CSocketFile 类 对 象。 以 下 介 绍 的 针 对 字 节 流 型 套 接 字 的 操 作 步 骤 中, 只 有 第3 步 对 于 客 户 方 和 服 务 方 操 作 是 不 同 的, 其 他 步 骤 都 相 同。 ---- (1) 构 造 一 个CSocket 对 象。 ---- (2) 使 用 这 个 对 象 的Create 成 员 函 数 产 生 一 个socket 句 柄。 在 客 户 方 程 序 中, 除 非 需 要 数 据 报 套 接 字,Create 一 般 情 况 下 应 该 使 用 默 认 参 数。 而 对 于 服 务 方 程 序, 必 须 在 调 用Create 时 指 定 一 个 端 口。 注 意:CArchive 不 能 与 数 据 报(UDP) 套 接 字 一 起 工 作, 因 此 对 于 数 据 报 套 接 字,CAsyncSocket 和CSocket 的 使 用 方 法 是 一 样 的。 ---- (3) 如 果 是 客 户 方 套 接 字, 则 调 用CAsyncSocket ∷Connect 与 服 务 方 套 接 字 连 接; 如 果 是 服 务 方 套 接 字, 则 调 用CAsyncSocket ∷Listen 开 始 监 听 来 自 客 户 方 的 连 接 请 求, 收 到 连 接 请 求 后, 调 用CAsyncSocket ∷Accept 接 受 请 求, 建 立 连 接。 注 意:Accept 成 员 函 数 需 要 一 个 新 的 并 且 为 空 的CSocket 对 象 作 为 它 的 参 数, 解 释 同 上。 ---- (4) 产 生 一 个CSocketFile 对 象, 并 把 它 与CSocket 对 象 关 联 起 来。 ---- (5) 为 接 收 和 发 送 数 据 各 产 生 一 个CArchive 对 象, 把 它 们 与CSocketFile 对 象 关 联 起 来。 切 记CArchive 是 不 能 和 数 据 报 套 接 字 一 起 工 作 的。 ---- (6) 使 用CArchive 对 象 在 客 户 与 服 务 方 传 送 数 据。 (7) 通 讯 完 毕 后, 销 毁CArchive、CSocketFile 和CSocket 对 象。 
      

  4.   

    本文描述套接字类中的通知函数。这些成员函数都是回调函数,框架调用它们将重要事件通知给套接字对象。通知函数有: OnReceive:通过调用 Receive 通知此套接字缓冲区中有需要检索的数据。 
    OnSend:通过调用 Send 通知此套接字现在可以发送数据。 
    OnAccept:通过调用 Accept 通知此侦听套接字可以接受挂起的连接请求。 
    OnConnect:通知此连接套接字其连接尝试已完成:可能成功,也可能存在错误。 
    OnClose:通知此套接字它连接的套接字已关闭。 
    注意   一个附加的通知函数是 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 示例。有关更多信息,请参见: 
      

  5.   

    回复人:nineclock(本人成分:59%的帅,40%的酷,1%的微量羞涩(-'_'-)) () 信誉:105  你copy的是很长了
     但答非所问。 人真的好不好
     谢谢
      

  6.   

    sorry,错了吗,对不起了。不过倒是可以参考我的意见