李佑民
---- 在 Internet Explorer 中, 微 软 带 有 两 个 很 好 的 局 域 网 通 信 工 具:Chat 和 NetMeeting, 它 们 能 使 局 域 网 中 的 用 户 通 过 互 发 消 息 文 本、 电 子 白 板, 甚 至 语 音 和 视 频 图 像 进 行 交 流, 但 是 它 们 都 需 要 指 定 一 个 服 务 器 才 能 正 常 工 作。 在 通 常 由 若 干 台 Windows 95/98 组 成 的 对 等 网 中, 真 正 适 用 的 消 息 传 送 工 具 仍 然 是 微 软 通 过 网 络 组 件 安 装 的 WinPopup.EXE, 但 微 软 好 像 忘 记 了 这 个 小 程 序, 使 它 从 最 初 发 行 到 现 在 依 然 是 老 样 子, 程 序 界 面 跟 不 上 时 代 不 说, 每 次 只 能 发 送 38 个 字 节 的 消 息 文 本, 消 息 不 能 保 存 等 不 足 使 人 感 到 十 分 遗 憾。 既 然 认 为 它 不 好, 那 我 们 就 自 己 写 一 个。 就 像 VC + + 中 某 个 类 的 增 强 版 都 带 有 Ex 后 缀 一 样, 我 们 也 决 定 将 增 强 后 的 WinPopup.EXE 命 名 为 WinPopup Ex.EXE, 图1 是 完 成 后 的 WinPopupEx 的 外 观。
----要 在 局 域 网 中 实 现 计 算 机 之 间 的 通 信, 可 以 采 用 的 办 法 很 多, 最 容 易 想 到 的 是 针 对 某 一 个 网 络 协 议 进 行 编 程, 如 TCP/IP、IPX/SPX 和 NetBEUI, 但 是 控 制 稍 显 复 杂, 不 易 实 现 网 络 广 播 及 只 能 针 对 某 一 个 协 议, 显 得 不 够 灵 活。 微 软 为 我 们 提 供 了 内 部 进 程 的 通 信(IPC) 接 口, 如 果 按 照 ISO 的 OSI 模 型 划 分, 它 工 作 在 会 话 层, 与 它 的 下 一 层( 传 输 层) 采 用 何 种 协 议 无 关。 在 IPC 接 口 中,MailLosts( 邮 槽) 和 NamedPipes( 命 名 管 道) 都 可 以 在 服 务 器 进 程 和 客 户 机 进 程 之 间 进 行 通 信, 而 且 不 论 服 务 器 进 程 和 客 户 机 进 程 是 驻 留 在 同 一 台 机 器, 还 是 通 过 网 络 联 系 在 一 起,IPC 接 口 都 能 正 确 地 将 信 息 从 一 个 进 程 传 送 到 另 一 个 进 程。 而 我 们 要 做 的 就 是 在 网 络 中 的 每 台 计 算 机 上 以 它 的“ 计 算 机 名” 建 立 一 个 邮 槽 或 命 名 管 道, 其 他 计 算 机 如 果 要 发 送 信 息 给 某 台 计 算 机, 它 只 需 要 像 打 开 一 个 文 件 一 样( 后 面 您 将 看 到, 的 确 是 采 用 文 件 操 作 函 数) 打 开 以 那 台 计 算 机 命 名 的 邮 槽 或 命 名 管 道, 然 后 像 写 文 件 一 样 将 数 据 写 入, 最 后 关 闭 它 就 完 成 了 一 次 通 信 操 作。
----邮 槽 和 命 名 管 道 各 有 优 缺 点, 命 名 管 道 是 可 靠 的, 在 发 送 方 不 能 确 认 接 收 方 已 接 收 到 数 据 时, 它 会 返 回 一 个 错 误, 但 是 它 对 网 络 广 播 操 作 就 显 得 力 不 从 心; 而 邮 槽 则 刚 好 相 反, 它 可 以 将 消 息 一 次 传 送 给 一 组 计 算 机, 比 如 一 个 “ 工 作 组” 或 整 个 局 域 网, 但 它 不 能 保 证 发 送 出 去 的 数 据 一 定 就 被 接 收 方 所 接 收。 考 虑 到 WinPopup 使 用 的 是 邮 槽, 为 保 证 连 续 性, 我 们 也 决 定 采 用 MailLosts( 邮 槽) 机 制, 至 于 通 信 的 不 可 靠 性, 您 在 后 面 将 看 到, 我 们 用 一 点 手 工 代 码 就 可 以 弥 补 它。
----在 这 个 增 强 版 本 中, 我 们 要 实 现 以 下 一 些 WinPopup 没 有 的 功 能:
消 息 可 以 自 动 保 存, 根 据 您 的 选 择 最 多 可 以 保 存 30 天;
消 息 大 小 不 再 限 制 在 38 字 节, 每 条 消 息 最 多 可 以 达 到 400 字 节;
对 单 个 计 算 机 发 出 的 消 息, 可 以 要 求 接 收 方 确 认