Internet 服 务 端 口 测 试 程 序 的 设 计 与 实 现
----
程 序 的 实 用 背 景---- 当 前, 上 网 的 朋 友 越 来 越 多, 遇 到 的 问 题 也 越 来 越 多, 最 常 见 的 就 是 关 于 域 名 服 务 器(DNS)、 邮 件 服 务(SMTP) 和POP3 等 服 务 器 的 配 置 问 题。 例 如, 选 用 哪 一 个DNS,202.96.0.133 还 是202.96.26.243 ? 记 不 清ISP 的 邮 件 服 务 器 和 域 名 服 务 器 的IP 地 址,202.96.26.243 还 是202.96.26.245? 另 外 一 个 问 题 是, 我 们 在 下 载 文 件 的 时 候, 往 往 面 临 从 多 个 不 同 主 机 下 载 的 选 择( 像sunsite 有 数 十 个 镜 像 站 点)。 那 么, 选 择 哪 一 个 站 点 进 行 下 载 是 最 快 的 呢? 笔 者 为 此 编 写 了 一 个 应 用 程 序, 试 图 对Internet 常 用 的 网 络 通 信 端 口( 如Web、Email、FTP 等) 进 行 连 接 测 试, 获 得 服 务 端 口 的 状 态 和 响 应 时 间 指 标, 从 而 为 更 有 效 地 使 用Internet 提 供 准 确 的 参 考 数 据。 笔 者 为 该 程 序 命 名 为Tester( 测 试 者), 从 后 面 叙 述 不 难 发 现,Tester 还 可 以 作 为 简 单 的Internet 系 统 性 能 测 试 工 具 来 使 用。
---- 虽 然Tester 也 涉 及 了 其 它 的 编 程 方 法, 但 就 总 体 而 言,Tester 属 于Socket 应 用 程 序。 所 以 我 们 先 从Socket 编 程 的 模 型 入 手, 介 绍Tester 程 序 的 设 计 与 实 现。
Socket 编 程 模 型---- Socket( 套 接 字) 是 网 络 通 信 的 一 个 端 点。 我 们 知 道, 网 络 通 信 通 常 指 两 台 主 机 或 两 个 进 程, 通 过 网 络 传 递 它 们 之 间 的 数 据, 这 样 的 过 程 可 以 理 解 为 网 络 的 一 次 对 话(Session)。 网 络 对 话 的 每 一 端 就 成 为 网 络 通 信 的 端 点, 即 网 络 通 信 实 体 的 最 小 单 位。 当 使 用Socket 接 口 对 网 络 通 信 编 程 时,Socket 是 网 络 通 信 过 程 中 端 点 的 抽 象 表 示。 大 多 数 网 络 通 信 采 用 客 户 / 服 务 器 模 型, 客 户 / 服 务 器 模 型 按 照 端 点 的 工 作 性 质 来 区 分 通 信 双 方 的 端 点。 例 如, 客 户 / 服 务 器 模 型 将 启 动 网 络 服 务 请 求 的 端 点 视 作 客 户 进 程 或 客 户 程 序; 对 客 户 请 求 作 出 响 应 的 端 点 是 服 务 器 进 程 或 服 务 器 程 序。
---- 为 了 进 行 网 络 通 信, 程 序 在 网 络 对 话 的 每 一 端 都 需 要 一 个Socket, 即 客 户 端Socket 和 服 务 器 端Socket。 两 个Socket 之 间 的 连 接 可 以 是 面 向 连 接 的 也 可 以 是 无 连 接 的。 虽 然 从 目 前 看,Socket 编 程 已 经 不 再 局 限 于UNIX 系 统, 但 是Socket 接 口 在 网 络 通 信 时 仍 然 使 用UNIX 系 统I /O 概 念,Socket 接 口 模 型 仍 然 采 用Open Read Write Close 方 式。
---- Socket 编 程 的 包 括 以 下 几 个 主 要 步 骤: 建 立Socket → 配 置Socket → 通 过Socket 发 送 数 据 → 通 过Socket 接 收 数 据 → 关 闭Socket。
CSocket 编 程 模 型---- 对 于 网 络 通 信 编 程 的 初 学 者 来 说, 直 接 使 用 上 述Socket 模 型 会 感 觉 困 难 和 复 杂。Visual C + + 的MFC( 基 础 类 库) 提 供 了 一 些 封 装 好 的 对 象, 这 些 对 象 的 概 念 相 对 简 单, 编 程 相 对 容 易。Tester 程 序 就 是 使 用MFC 中 的 几 个 与Socket 相 关 的 类 来 实 现 的。
---- 在 服 务 器Socket 和 客 户Socket 之 间 建 立 通 信 的 过 程 如 下。 1. 创 建CSocket 对 象。
---- 2. 使 用 该 对 象 产 生Socket 句 柄。
---- 3. 如 果Socket 是 客 户, 调 用CAsyncSocket::Connect, 连 接 本 地 的Socket 和 服 务 器Socket。
---- 如 果Socket 是 服 务 器, 调 用CAsyncSocket::Listen, 开 始 侦 听 从 客 户 端 来 的 访 问 请 求, 如 果 收 到 请 求, 调 用CAsyncSocket::Accept 进 行 接 收 处 理。
---- 4. 建 立CSocketFile 对 象, 并 且 使 该 对 象 与CSocket 对 象 具 备 一 定 的 联 系。
---- 5. 建 立CArchive 对 象, 以 便 实 现 卸 装( 接 收) 数 据 和 存 储( 发 送) 数 据 的 目 的 地 址。 当 然, 该CArchive 对 象 应 该 与 前 面 的CSocketFile 对 象 建 立 联 系。
---- 6. 使 用CArchive 对 象 在 客 户 和 服 务 器Socket 之 间 传 递 数 据, 从 而 实 现 服 务 器Socket 和 客 户 机Socket 之 间 的 通 信。 值 得 注 意 的 是, 一 个 给 定 的CArchive 对 象 只 能 在 单 一 的 方 向 上 传 递 数 据: 或 者 接 收 或 者 发 送。 一 般 情 况 下, 可 能 需 要 两 个CArchive 对 象 来 实 现 数 据 的 双 向 传 递。
---- 7. 解 析archive、Socket file、Socket 对 象。
---- 上 述 内 容 图 示 如 下:
Client Server
---- 简 单 地 讲, 对 于 程 序 的 实 现, 笔 者 主 要 考 虑 了 三 部 分 的 内 容:Socket、 时 钟 以 及 界 面。
---- 1.Socket( 网 络 通 信 实 体)
---- Tester 作 为 一 个 客 户 端 的Socket 通 信 程 序, 包 括TestSocket(CSocket 派 生 类)、TestSocketFile(CSocketFile 派 生 类) 和TestArchiveIn、TestArchiveOut(CArchive 派 生 类) 等。 这 些 对 象 的 建 立 和 使 用 与 上 述CSocket 编 程 模 型 相 同。
---- 2. 时 钟( 用 于 测 试 网 络 上Internet 服 务 端 口 的 响 应 时 间)
---- Tester 在Socket 连 接 建 立 的 前 后 分 别 调 用clock 系 统 函 数, 从 而 可 以 利 用 二 者 的 相 对 差 别 获 得 绝 对 时 间 参 数。clock 函 数 可 以 获 得 某 一 系 统 调 用 过 程 所 耗 费 的 时 间, 其 返 回 值 是 处 理 器 的 计 时 单 位 次 数。Tester 的 时 间 单 位 是 毫 秒。
---- .... / / 其 它 代 码
---- clock-t start=clock();
---- if(m-pSocket ->Connect(lpszAddress,nPort))
---- {
-------- clock-t end=clock();
-------- … … / / 其 它 代 码
---- }
---- else
---- {
-------- clock-t end=clock();
-------- … … / / 其 它 代 码
---- }
---- … … / / 其 它 代 码
---- 从 程 序 中 可 以 看 出,Tester 记 录 的 响 应 时 间, 是 指 处 理 器 在 整 个 网 络 通 信 的 连 接 建 立 过 程 中 的 响 应 时 间。 这 一 结 果 和 网 络 状 况、 服 务 器 端 的 响 应 时 间、 本 地 系 统 的 性 能 均 有 关 系。 实 际 上, 网 络 用 户 在 实 际 应 用 过 程 中 真 正 的 时 间 延 迟, 就 是 上 述 各 个 因 素 的 总 和。 另 外,Tester 的 响 应 时 间 结 果 是10 次 测 试 的 平 均 数。 所 以,Tester 测 试 的 是 整 个 网 络 应 用 的 响 应 时 间, 是 综 合 的 指 标。
---- 3. 界 面( 与 程 序 使 用 者 进 行 交 互, 指 令 的 输 入 和 结 果 的 输 出)
---- (1) 输 入 部 分
---- Tester 使 用 了 对 话 框 对 象:SetupDlg::CDialog, 在 对 话 框 中, 使 用Check、Edit 等 控 制 件, 并 且 通 过 这 些 控 制 向 程 序 传 递 使 用 者 所 指 示 的 测 试 信 息。
---- (2) 输 出 部 分
---- Tester 是 单 文 档 界 面(SDI) 的 应 用 程 序。 窗 口 风 格 见 下 面 程 序 段:
---- … … / / 其 它 代 码
---- ---- CEditView::PreCreateWindow(cs);
--------cs.style=AFX-WS-DEFAULT-VIEW|WS-VSCROLL|
ES-AUTOHSCROLL|ES-AUTOVSCROLL|ES-MULTILINE|ES-NOHIDESEL|ES-READONLY;
---- … … / / 其 它 代 码
---- 利 用Tester 的 菜 单 功 能 可 以 把 每 次 测 试 结 果 存 为 纯 文 本 格 式 的 文 件。
输 入 指 令 对 话 框
---- Tester 对 于 熟 悉Internet 应 用 的 使 用 者 来 说, 界 面 一 目 了 然, 操 作 十 分 简 单。 首 先, 使 用 者 根 据 测 试 需 要 填 写 参 数 设 置 对 话 框; 确 认 后, 由Tester 程 序 自 动 执 行 测 试 工 作, 并 将 测 试 结 果 显 示 于Tester 窗 口 中。 同 时, 用 户 也 可 以 将 测 试 结 果 存 为 文 本 文 件。
---- Tester 的 用 户 可 以 自 定 义 一 些 服 务 端 口 进 行 测 试( 例 如, 对 话 框 中 没 有 列 出 的Gopher 等Internet 服 务)。 当 然, 在 这 种 情 况 下, 用 户 必 须 知 道 被 测 试 的 服 务 的Socket 端 口 号。 下 面 给 出 几 个 测 试 结 果 文 件, 仅 供 参 考( 笔 者 经 由2631 拨 号 上 网 进 行 测 试)。
---- 下 面 给 出 几 个 测 试 结 果 文 件,仅 供 参 考(笔 者 经 由2631 拨 号 上 网 进 行 测 试 )。
被测主机:163.net 测试时间:10:37, June 09, 1998 Internet服务 状态 响应时间(ms) -------------------------------------------------------------- FTP OFF SMTP ON 2030 DNS OFF POP3 ON 1050 HTTP ON 380 被测主机:ihw.com.cn 测试时间:10:38, June 09, 1998 Internet服务 状态 响应时间(ms) -------------------------------------------------------------- FTP OFF SMTP ON 3670 POP3 ON 720 HTTP OFF 被测主机:www.yahoo.com 测试时间:10:38, June 09, 1998 Internet服务 状态 响应时间(ms) -------------------------------------------------------------- FTP OFF TELNET OFF SMTP OFF DNS OFF POP3 OFF HTTP ON 1700 被测主机:www.microsoft.com 测试时间:10:39, June 09, 1998 Internet服务 状态 响应时间(ms) -------------------------------------------------------------- FTP OFF TELNET OFF SMTP OFF DNS OFF POP3 OFF HTTP ON 930 被测主机:www.asia.microsoft.com 测试时间:10:39, June 09, 1998 Internet服务 状态 响应时间(ms) -------------------------------------------------------------- HTTP ON 650
----
本文地址:http://com.8s8s.com/it/it3124.htm