收藏 分享(赏)

计算机网络实验指导.docx

上传人:oceanpvg 文档编号:2370094 上传时间:2018-09-13 格式:DOCX 页数:183 大小:1.35MB
下载 相关 举报
计算机网络实验指导.docx_第1页
第1页 / 共183页
计算机网络实验指导.docx_第2页
第2页 / 共183页
计算机网络实验指导.docx_第3页
第3页 / 共183页
计算机网络实验指导.docx_第4页
第4页 / 共183页
计算机网络实验指导.docx_第5页
第5页 / 共183页
点击查看更多>>
资源描述

1、21 世纪计算机系列教材计算机网络实验指导杨金生 等编著上 海 交 通 大 学 出 版 社内 容 简 介本 书 是 配 合 学 习 计 算 机 网 络 原 理 课 程 的 实 验 指 导 书 , 共 有 九 个 实 验 : 实 验 1, 聊 天 程 序 ; 实 验 2, 网 络 文 件 传 输 ; 实 验 3, FTP 协 议 的 实 现 ; 实 验 4, 跟 踪 路 由 ; 实 验 5, 广 播 通 信 技 术 ; 实 验 6, 多 播 通 信 技 术 ; 实 验 7, 在 网 络 中 传 输 图 像 ; 实 验 8, 串 口 通 信 ; 实 验 9, 连 续 ARQ 协议。全 书 九 个

2、实 验 循 序 渐 进 , 对 设 备 要 求 不 高 , 很 多 实 验 在 单 机 上 模 拟 网 络 环 境 就 可 以 完 成 , 有助 于 学 生 在 学 习 计 算 机 网 络 基 本 原 理 的 基 础 上 掌 握 实 际 的 开 发 能 力 。 本 书 可 作 为 高 等 院 校 相 关 专 业 讲 授 计 算 机 网 络 时 的 实 验 指 导 书 , 也 可 作 为 从 事 网 络 编 程开 发 人 员 的 参 考 用 书 , 同 时 也 适 合 读 者 自 学 。书 名:计算机网络实验指导 作 者:杨金生 出版社:上海交通大学出版社 ISBN 7-313-03164-5中

3、图分类号 TP.523 开 本: 1/16定 价:20.00 ,)序计 算 机 技 术 的 发 展 推 动 了 经 济 的 发 展 、 社 会 的 发 展 。 如 果 说 1946 年 诞生的电 子 数 字 计 算 机 显 示 出 它 的 速 度 和 记 忆 能 力 的 优 势 , 那 么 1958 年 出现的高级语 言 则 把 计 算 机 从 少 数 熟 悉 机 器 语 言 的 专 业 人 员 那 里 解 放 出 来 , 交 给 了 广 大 的 计 算 机用户;而 1971 年 开始经 历 了近 20 年 发展的个人计算机,则将计算机从企业、 单 位 等 少 数 拥 有 者 那 里 推 向

4、了 每 个 家 庭 、 个 人 ; 始 于 1969 年 发展于 20 世纪 90 年 代 的 计 算 机 网 络 , 它 的 互 联 性 、 开 放 性 和 共 享 性 得 到 了 淋 漓 尽 致 的 发 挥 。 坐 在 终 端 前 的 你 , 就 可 以 查 到 想 要 的 信 息 , 可 以 办 好 的 事 愈 来 愈 多 , 仿 佛 整 个 世 界 就 在 你 的 眼 前 。 计 算 机 改 变 了 世 界 。 当 今 的 社 会 也 好 像 受 摩 尔 定 律 的 支 配 一 样 , 每 18 个 月 翻 一 番 , 形 成 了 知 识 爆 炸 的 年 代 , 新 经 济 的 年 代

5、 。社会的发展回过头来对计算机 教 育提出了更新 的要求。 1991 年 ACM 和 IEEE 所提出的计算 91 教 程,计算机网络还没有成为一个单独的知识领域,而 2001 年 所推出的 2001 教 程 , 出 现 了 网 络 及 其 计 算 的 知 识 领 域 , 因 此 计 算 机 网 络 的 课 程 建 设 意 义 非 同 一 般 ; 计 算 机 学 科 是 门 实 践 性 很 强 的 学 科 , 提 升 学 生 的 动 手 实 践 能 力 , 是 计 算 机 课 程 建 设 的 重 要 课 题 ; 这 就 需 要 有 教 师 致 力 于 这 个 项 目 的 建 设 , 使 教 学

6、实践活动提高到一个新的水平上。上 海 交 通 大 学 计 算 机 系 杨 金 生 副 教 授 总 结 了 他 多 年 的 教 学 经 验 , 设 计 了 计 算 机 网 络 具 有 代 表 性 的 九 个 实 验 , 编 写 的 同 时 也 考 虑 到 各 个 院 校 的 不 同 实 验 环 境 , 大 部 分 实 验 在 单 机 上 模 拟 网 络 环 境 就 可 以 完 成 。 他 以 规 范 的 形 式 撰 写 了 实 验 指 导 书 , 规 定 了 实 验 目 的 、 实 验 要 求 , 详 细 阐 述 了 实 验 原 理 和 实 验 步 骤 , 并 给 出 了 思 考 题 。 在 上

7、 海 交 通 大 学 出 版 社 的 支 持 下 , 计 算 机 网 络 实 验 指 导 一 书 将 付 梓 出 版 , 这 是 有 利 于 教 学 , 有 利 于 学 生 的 好 事 , 是 值 得 推 荐 的 事 。侯文永2002 年 5 月3前 言现 今 , 学 生 中 对 计 算 机 网 络 的 学 习 热 情 很 高 , 但 其 动 手 实 践 能 力 却 比 较 差 , 究 其 原 因 , 是 因 为 缺 少 一 本 规 范 的 循 序 渐 进 的 实 验 指 导 书 , 而 计 算 机 网 络 这 门 课 程 仅 讲 述 理 论 知 识 , 同 学 们 在 学 习 时 会 觉 得

8、 抽 象 和 难 以 理 解 。 本 书 编 写 的 目 的 就 是 为 了 让 学 生 亲 自 动 手 实 现 一 个 网 络 程 序 , 体 会 一 下 基 于 网 络 的 程 序 是 如 何 工 作 的 , 各 种 通 信 方 式 的 差 别 , IP 地 址 和 端 口 号 的 真 正 含 义 , 协 议 中 数 据 帧 的 格 式 如 何 用 程 序 语 言 表 达 等 。 通 过 这 些 实 验 , 进 一 步 理 解 计 算 机 网 络 的 基 本 原 理 。 全书 共 有九个实验: 实验 1, 聊天程序; 实验 2, 网络文件传输; 实验 3, FTP协议的实现; 实验 4,

9、跟 踪路由; 实验 5, 广播 通信技术; 实验 6, 多播通信技术;实验7,在网络中传输图像;实验 8,串口通信;实验 9,连续 ARQ 协议。 Microsoft 公司的 Visual C+ MFC 对 Windows Socket API 的封装使我们能轻松 地 实 现 网 络 编 程 。 当 然 , 即 便 如 此 , 学 习 网 络 编 程 也 不 是 一 件 容 易 的 事 情 , 它 需 要 多 方 面 的 知 识 。 因 此 , 读 者 在 学 习 本 书 之 前 应 该 已 具 备 了 网 络 和 C+的 基 本 知识。本 书 既 适 合 教 学 之 用 , 又 适 合 于

10、自 学 , 对 设 备 要 求 不 高 , 很 多 实 验 在 单 机 上 模 拟 网 络 环 境 就 可 以 完 成 , 有 助 于 学 生 在 学 习 计 算 机 网 络 基 本 原 理 的 基 础 上 , 掌 握 实 际 的 开 发 能 力 。 实 验 步 骤 给 出 每 一 个 具 体 的 编 程 及 操 作 方 法 , 边 讲 原 理 边 分 析 程 序 , 讲 练 结 合 , 具 有 典 型 性 、 实 用 性 和 指 导 性 的 特 点 , 不 但 可 作 为 大 专 院 校 相 关 专 业 讲 授 计 算 机 网 络 时 的 实 验 指 导 书 , 同 时 也 可 作 为 从

11、事 网 络 编 程 开 发 人员的参考用书。参 加 本 书 编 写 的 有 : 杨 金 生 、 黄 毅 峰 、 刘 敩 、 魏 珂 、 林 显 春 、 许 春 、 杨 斯 奇 等 。 由于作者 ( yang-) 水平有限, 书中难免存在错误和疏漏之处,恳请广大同行和读者提出批评和建议。编 者2002 年 5 月4实验 1实 验 7:实 验 环 境硬 件 环 境 : 586 以 上 的 兼 容 机 , 装 有 TCP/IP 协 议 的 单 机 、 局 域 网 或 Internet 网。 操 作 系 统 : Windows 98 或以上版本。软 件 : Visual C+实验八:硬 件 环 境 :

12、 586 以 上 的 兼 容 机 两 台 , 通 过 RS232C 接 口 连 接 , 接 线 方 法 见 实 验 9 原 理 。 操 作 系 统 : Windows 98 或以上版本。软 件 : Visual C+实验九:硬 件 环 境 : 586 以 上 的 兼 容 机 两 台 , 通 过 RS232C 接 口 连 接 , 接 线 方 法 见 实 验 9 原 理 。 操 作 系 统 : Windows 98 或以上版本。软 件 :T urbo C注 意 : RS232C 接 口 的 驱 动 芯 片 很 容 易 烧 毁 , 不 可 接 错 或 带 电 插 拔 。 说 明 : 书 中 的 程

13、序 代 码 可 从 上 海 交 通 大 学 出 版 社 网 站 “资 料 下 载 ”栏 目 中 下 载 。 http:/ http:/5目 录实验 1 聊 天 程 序 1实验 2 网 络 文 件 传 输 16实验 3 FTP 协 议 的 实 现 .40实验 4 跟 踪 路 由 .61实验 5 广 播 通 信 技 术 83实验 6 多 播 通 信 技 术 100实验 7 在 网 络 中 传 输 图 像 .113实验 8 串 口 通 信 129实验 9 连续 ARQ 协议 1501实验 1 聊 天 程 序【实验目的】 熟悉 Visual C+的 基 本 操 作 。 基 本 了 解 基 于 对 话

14、框 的 windows 应 用 程 序 的 编 写 过 程 。 对于 Windows Socket 编 程 建 立 初 步 概 念 。【实验要求】 应用 Visual C+中 MFC CSocket 类 , 实 现 网 络 数 据 传 输 。 仿 照 本 实 验 步 骤 , 制 作 实 用 的 局 域 网 一 对 一 聊 天 程 序 。【实验原理】一 、 Windows Socket 和 套 接 口 的 基 本 概 念网 际 协 议 ( Internet Protocol, IP) 是 一 种 用 于 互 联 网 的 网 络 协 议 , 已 广 为 人 知 。 它 可 广 泛 用 于 大 多

15、数 计 算 机 操 作 系 统 上 , 也 可 用 于 大 多 数 局 域 网 LAN( 比 如 办 公 室 小 型 网 络 ) 和 广 域网 WAN( 比 如 说 互 联 网 ) 。 从 它 的 设 计 看 来 , IP 是 一 个 无 连 接 的 协 议 , 并 不 能 保 证 数 据 投 递 万 无 一 失 。 两 个 上 层 协 议 ( TCP 和 UDP) 依 赖 IP 协 议 进 行 数 据 通 信 。如果希望 在 Microsoft Windows 下通过 TCP 和 UDP 协 议建立 网 络应用程 序, 则需 要使用 Winsock 套接口编程技术。套 接 口 , 就 是 一

16、 个 指 向 传 输 提 供 者 的 句 柄 。 Win32 中 , 套 接 口 不 同 于 文 件 描 述 符 , 所 以 它 是 一 个 独 立 的 类 型 SOCKET。 Windows Sockets 描 述 定 义 了 一 个 Microsoft Windows 的 网 络 编 程 界 面 , 它 是 从 Unix Socket 的 基 础 上 发 展 而 来 的 , 为 Windows TCP/IP 提供了一个 BSD 型的套接 字规范 , 除与 4.3BSD Unix Sockets 完全 兼容外 , 还包括 一个扩 充文件 , 通过 一 组 附 加 的 API 实 现 Wind

17、ows 式 (即 事 件 驱 动 )的 编 程 风 格 ; 而 Winsock 则 是 在 Microsoft Windows 中 进 行 网 络 应 用 程 序 设 计 的 接 口 。 Windows 在 Internet 支配域中的 TCP /IP 协议定 义了 Winsock 网 络 编 程 规 范 , 融 入 了 许 多 新 特 点 。 使 用 Socket 的 目 的 是 使 用 户 在 网 络 协 议 上 工 作 而 不 必 对 该 网 络 协 议 有 非 常 深 入 的 了 解 。 此 外 , 编 写 的 程 序 还 可 被 迅 速 地 移 植 到 任 何 支持 Socket 的

18、网络系统中去。Winsock 提 供 了 一 种 可 为 指 定 传 输 协 议 打 开 、 计 算 和 关 闭 会 话 的 能 力 。 在 Windows 下, TCP/IP 上层模型在很大程 度上与 用户的 Winsock 应用有关 ; 换言 之, 用户 的 Winsock 应用控 制 了 会 话 的 方 方 面 面 , 必 要 时 , 还 会 根 据 程 序 的 需 要 格 式 化 数 据 。套 接 口 有 三 种 类 型 : 流 式 套 接 口 、 数 据 报 套 接 口 及 原 始 套 接 口 。流式套接 口定义了 一种可 靠的面 向连接 的服务 ( 利用 TCP 协议) , 实现了

19、无差 错无重 复的 顺 序 数 据 传 输 。 数 据 报 套 接 口 定 义 了 一 种 无 连 接 的 服 务 ( UDP 协 议 ) , 数 据 通 过 相 互 独 立1的报文进 行传输, 是 无序的, 并且不保 证可靠 和无差 错。 原始套接 口允许 对低层 协议如 IP 或ICMP 直 接 访 问 , 主 要 用 于 新 的 网 络 协 议 实 现 的 测 试 等 。面 向 连 接 服 务 器 处 理 的 请 求 往 往 比 较 复 杂 , 不 是 一 来 一 去 的 请 求 应 答 所 能 解 决 的 , 而 且 往 往 是 并 发 服 务 器 。 使 用 面 向 连 接 的 套

20、接 口 编 程 , 可 以 通 过 图 1.1 来 表 示 。图 1.1无 连 接 服 务 器 一 般 都 是 面 向 事 务 处 理 的 , 一 个 请 求 、 一 个 应 答 就 完 成 了 客 户 程 序 与 服 务 程 序 之 间 的 相 互 作 用 。 若 使 用 无 连 接 的 套 接 口 编 程 , 程 序 的 流 程 可 以 用 图 1.2 表示。原 始 套 接 口 的 介 绍 和 使 用 将 放 在 实 验 4 中讲解。套接口工作过程如下:服务器首先启动,通过调用 socket()建 立 一 个 套 接 口 , 然 后 调 用 bind()将 该 套 接 口 和 本 地 网

21、络 地 址 联 系 在 一 起 , 再 调 用 listen()使 套 接 口 做 好 侦 听 的 准 备 , 并 规定它的请求队列的长度,之后,调用 accept()来 接 收 连 接 。 客 户 在 建 立 套 接 口 后 就 可 调 用 connect()和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用 read()和 write()来 发 送 和 接 收 数 据 。 最 后 , 待 数 据 传 送 结 束 后 , 双 方 调 用 close()关 闭 套 接 口 。在 网 络 编 程 中 , 掌 握 端 口 的 概 念 十 分 重 要 。端口: 基于 TCP/IP 协议

22、的网络中, 计 算机都 分配有 一 个 IP 地址, 用一个 32 位二 进制数 来 表 示 , 正 式 的 称 呼 是 “Ipv4 地 址 ”。 客 户 机 需 要 通 过 TCP 或 UDP 和 服 务 器 通 信 时 , 必 须 指定服务 器的 IP 地址和服 务端 口 号。 另外, 服 务器打 算侦听接 入客户机 请求时, 也必须 指定2图 1.2一个 IP 地址和一个 端口号。 在选择 端口时, 应 特别小 心, 因为有 些可用端 口号是 为 “已知 的”(即固定 的) 服务保 留的 , 如文 件传输协 议和超 文本 传输协议 , 即 FTP(21 号端口 ) 和 HTTP(一般为

23、8080 端 口) 。 “已知 的协议 ”, 即固定协 议 , 采用的 端口由 “互联 网编号分 配认证( IANA) ”控 制 和 分 配 , RFC 1700 中 说 明 的 编 号 。从本质上 说, 端口号 可分成 3 类: “已 知” 端口、 已 注册端口、 动态和 ( 或) 私用端 口。 “ 已 知 ”端 口 01023, 由 IANA 控 制 , 是 在 UNIX 中 为 固 定 服 务 保 留 的 。 已 注 册 的 端 口 102449151, 由 IANA 列 出 来 的 , 供 普 通 用 户 的 普 通 用 户 进 程 或 程 序使用。 动 态 和 ( 或 ) 私 用 端

24、 口 4915265535。普 通 用 户 应 用 应 选 择 102449151 之 间 的 已 注 册 端 口 , 从 而 避 免 端 口 号 已 被 另 一 个 应 用 或 系 统 服 务 所 用 。 此 外 , 4915265535 间 的 端 口 可 自 由 使 用 , 因 为 IANA 这 些 端 口 上 没 有 注 册服务。到 1992 年 为止 , 人们所 熟知 的 端口号 介于 1255, 而 2561023 的端口 号通常 由 Unix 系 统 占 用 , 以 提 供 一 些 特 定 的 Unix 服务。现在 IANA 管理 11023 之 间 所 有 的 端 口 号 。I

25、nternet 扩展服务与 Unix 特 定 服 务 之 间 的 一 个 差 别 就 是 Telnet 和 Rlogin。 它 们 二 者 都 允 许 通 过 计 算 机 网 络 登 录 到 其 他 主 机 上 。 Telnet 是 采 用 端 口 号 为 23 的 TCP/IP 标准且几乎可以 在 所 有 操 作 系 统 上 进 行 实 现 。 相 反 , Rlogin 最 开 始 时 只 是 为 Unix 系 统 设 计 的 ( 尽 管 许 多 非 Unix 系 统 现 在 也 提 供 该 服 务 ) , 因 此 在 20 世纪 80 年 代 初 , 它 的 有 名 端 口 号 为 513

26、。客 户 端 通 常 对 它 所 使 用 的 端 口 号 并 不 关 心 , 只 需 保 证 该 端 口 号 在 本 机 上 是 惟 一 的 就 可 以 了 。 客 户 端 口 号 又 被 称 作 临 时 端 口 号 ( 即 存 在 时 间 很 短 暂 ) 。 这 是 因 为 它 通 常 只 是 在 用 户 运 行 该 客 户 程 序 时 才 存 在 , 而 服 务 器 则 只 要 主 机 开 着 , 其 服 务 就 运 行 。大多数 TCP/IP 实 现 给 临 时 端 口 分 配 10245000 之 间 的 端 口 号 。 大 于 5000 的 端 口 号 是 为3其 他 服 务 器 预

27、 留 的 ( Internet 上 并 不 常 用 的 服 务 ) 。 保 留 端 口 号Unix 系统有保留端口 号的概 念。 只有 具有超 级用 户特权的 进程才允 许给它 自己分 配一个保 留 端 口 号 。这 些 端 口 号 介 于 11023, 一 些 应 用 程 序 ( 如 有 名 的 Rlogin, 26.2 节 ) 将 它 作 为 客 户 与 服 务 器 之 间 身 份 认 证 的 一 部 分 。 而 Windows 中 的 端 口 分 配 又 有 所 不 同 , 只 要 不 和 已 知 端 口 冲 突 , 原 则 上 可 自 由 使 用 。二 、 MFC 对 Socket 编

28、 程 的 封 装 类 简 介Microsoft Windows Class Library(MFC) 中 提 供 了 较 高 级 封 装 的 类 用 来 实 现 网 络 通 信 。 图 1.3 给 出 了 CSocket 类的继承 关系。CAsyncSocket 类封装了 Windows Sockets API 函数, 提供 了 较 低 层 的 与 Windows Sockets 对 话 接 口 , 一 般 适 合 于 有 相 当 水平的网 络编程者 使用, 可方 便 地进行 底层的网 络事 件通知及 信 息 回 叫 控 制 等 操 作 。 图 1.3CSocket 类派生于 CAsyncSo

29、cket, 它继承了父类中一 些常用易 懂的 Windows Sockets API 函 数 , 并 对 CAsyncSocket 中 底 层 的 较 难 控 制 的 一 些 API 函 数 或 成 员 函 数 进 行 了 处 理 , 使 得 网络传输 简捷易用, 同时它 支持 模 块化的后 台信息 处 理, 解决了 CAsyncSocket 中较难克服的 多 线 程 处 理 。下 面 介 绍 用 Visual C+在 Windows 中实现 Socket 的 CSocket 类型成员函数( 这 些 成 员 函 数 实 际 上 是 从 CAsyncSocket 类继承来的 )。成员函数 和参数

30、说 明: B OOL Create ( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, longlEvent = FD_READ |FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT| FD_CLOSE ,LPCTSTR lpszSocketAddress = NULL )该 函 数 用 来 建 立 Socket, 如 果 函 数 成 功 , 则 返 回 非 零 值 ; 否 则 返 回 值 为 0。 其 中 :nSocketPort : 为 所 选 择 的 Socket 端口,一般要大于 1023, 如 果 该 参

31、 数 为 0, 则 由 系 统选 定 一 端 口 , 默 认 值 为 0。nSocketType : 为套接 字类型 SOCK_STREAM 或 SOCK_DGRAM。 SOCK_STREAM 表 示 为 流 套 接 字 ( 本 实 验 使 用 基 于 TCP 连 接 的 流 套 接 字 编 程 ) , SOCK_DGRAM 表 示 为 数 据 报 套 接 字 ( 将 在 以 后 实 验 中 讲 述 ) , 默 认 值 为 SOCK_STREAM 。lEvent :标识该 Socket 要完成哪种工作,默认值为 FD_READ|FD_WRITE|FD_OOB| FD_ACCEPT|FD_CON

32、NECT|FD_CLOSE 。lpszSockAddress:一个指向字符串的指针,该字符串包含了被连接套接口的网络地址。 一 个 带 点 的 数 字 , 如 “128.56.22.8”, 默 认 值 为 NULL。 Richard Stevens. TCP/IP 协 议 详 解 , p.13 的 译 文 。 Richard Stevens. TCP/IP 协 议 详 解 , p.13 的 译 文 。4注 意 : CSocket 中 , WinsockAPI 的 初 始 化 (socket)和 绑 定 (bind)两 部 分 工 作 都 完 成 了 。 B OOL Listen ( int n

33、ConnectionBacklog = 5 )该函数的 作用是等 待 Socket 请求, 如果调用 成功, 则 返回非零 值; 否 则返回值 为 0。 Listen 仅 对 那 些 支 持 连 接 的 套 接 字 起 作 用 , 也 就 是 SOCK_STREAM 类 型 的 套 接 字 。 在 进 程 应 答 连 接并把它 放到等待 队列时, 套 接字 被 置成被 动模式 (p assive mode) 。 本函数一般由哪些 一次 可 以 有 多 个 连 接 的 服 务 器 使 用 ( 或 任 何 需 要 接 收 连 接 的 应 用 ) 。nConnectionBacklog : 表 示

34、等 待 队 列 的 长 度 , 默 认 值 为 最 大 值 5, 有 效 值 为 15。 B OOL Connect ( LPCTSTR lpszHostAddress, UINT nHostPort )该 函 数 的 作 用 是 提 出 连 接 请 求 。 其 中 :lpszHostAddress : 对 象 连 接 的 套 接 字 的 网 络 地 址 、 机 器 名 , 如 , 或 以 句 点分 隔 的 数 字 , 如 “211.80.43.100”。nHostPort : 为 接 受 请 求 进 程 的 网 络 地 址 和 Socket 端 口 号 。注 意 : Connect 函 数

35、还 有 另 一 个 版 本 : BOOL Connect(const SOCKADDR* lpSockAddr,int nSockAddrLen); 具 体 用 法 可 以 参 阅 MSDN Library 中关于 CAnyscSocket 类 的 阐 述 。 v irtual void Close( )该 函 数 的 作 用 是 关 闭 该 Socket。三、利用 CSocket 进 行 传 输 的 辅 助 类 简 介1. CSocketFile 类CSocketFile 继承了 CFile 类 , 见图 1.4, 它可 以很自 如地用 来 在 基 于 Windows Socket 网 络

36、上 传 输 数 据 。 首 先 , 将 一 个 建 立 连接 CSocket 对象实例作为参数进 行初始 化, 然后, 将已经初 始 化的 CSocketFile 对象连接到 CArchive 对象 上, 接着 将数据 串 行 化,以使用 MFC 系 列 来 简 化 发 送 和 接 收 数 据 , 最 终 实 现 利 用 网 络的 Socket 传 输 和 本 机 上 的 流 传 输 一 样 简 单 。成 员 函 数 : CSocketFile 用 到 的 成 员 函 数 只 有 构 造 函 数 。 图 1.4CSocketFile:CSocketFile( CSocket* pSocket,

37、 BOOL bArchiveCompatible = TRUE );其 中 :pSocket : 连 接 到 CSocketFile 对象的套接口。bArchiveCompatible : 指 示 该 文 件 对 象 是 否 与 一 个 CArchive 对 象 一 起 使 用 。 只 有 当 希 望 在 单 机 方 式 下 来 使 用 这 个 CSocketFile 对 象 时 , 才 传 递 FALSE。 因 为 仅 有 CSocketFile 类实例 本 身 并 没 有 什 么 意 义 , 所 以 通 常 将 其 置 为 TRUE。说明: 此成员 函数用 来构造一 个 CSocketFi

38、le 对象。 当 此对象超 出范围或 被删除 时, 它的析 构 函 数 将 使 它 自 己 从 插 槽 对 象 上 分 离 。注意: 一 个 CSocketFile 对象也可以在没有 CArchive 对象的 情 况下作为 一个 (受限 制的) 文 件 来 使 用 。 缺 省 情 况 下 , CSocketFile 构造函数的 bArchiveCompatible 参数是 TRUE, 它 表 明 此 文 件 对 象 是 与 一 个 档 案 一 起 使 用 的 。 要 在 没 有 档 案 的 情 况 下 使 用 该 文 件 对 象 , 则 给 bArchiveCompatible 参数传递 FA

39、LSE。 在 “档 案 兼 容 ”模 式 下 , 一 个 CSocketFile 对象可以提 供 更 好 的 表 现 , 并 减 少 出 现 “死 锁 ”的 几 率 。52 CArchive 类CArchive 类没有 基类 。 CArchive 允许以一个永久二 进 制 (通常 为磁盘 存储 ) 的形 式保存 一 个 对 象 的 复 杂 网 络 , 它 可 以 从 永 久 存 储 中 装 载 对 象 , 并 在 内 存 中 重 新 构 造 它 们 。 使 数 据 永 久 保 留 的 过 程 就 叫 作 “串 行 化 ”。 一 般 可 以 把 一 个 CArchive 对 象 看 作 一 个

40、二 进 制 流 , 可 以 将 它 和 输 入 输 出 流 iostream 类 的 用 法 进 行 比 较 。 CArchive 对 象 一 般 和 一 个 文 件 类 关 联 ( CFile 类或 CSocketFile 类 ) 。 输 入 输 出 流 是 加 工 处 理 ASCII 字符,而 CArchive 类的用处是高效、 无 冗 余 地 处 理 二 进 制 数 据 。在 CArchive 类 中 , 重 载 了 提 取 ( ) 和 插 入 ( value;aroutvalue;aroutm_pMainWnd)-ShowAccept();/ 这 里 仅 仅 添 加 了 这 一 句 ,

41、 因 为 CLx2Dlg 类 是 发 送 接 收 消 息 的 主 窗 口 ,/ 而 且 应 用 程 序 发 送 接 收 的 消 息 也 在 CLx2Dlg 对 象 实 例 中 进 行 ,/ 所以当 CServer 类 的 对 象 收 到 客 户 机 的 Connect 消息时,/ 便可调用 CLx2Dlg 对象中的 ShowAccept() 函 数 处 理 。图 1.1212该 步 完 成 以 后 , 可 以 为 CLx2Dlg 类添加 public 成员函数 ShowAccept() :void CLx2Dlg:ShowAccept()m_server.Accept(m_recv); Afx

42、MessageBox(“Server 端 连 接 成 功 “);m_send.EnableWindow(TRUE); / 连 接 成 功 , 可 以 发 送m_listen.EnableWindow(FALSE); / 同 时 禁 止 侦 听 按 钮于是, 当 客户机 调用 m _client.Connect(m_ip, 1000); 时 , 主机 server 端发现 并调用 ShowAccept函 数 来 建 立 连 接 。 执 行 完 以 后 , Socket 连 接 便 被 建 立 。 接 下 来 的 工 作 便 是 添 加 发 送 聊 天 信 息 的 函 数 了 。注意到前 面点击发

43、 送按钮 的 OnSend() 函数已经 添加 好了, 在 Lx2 工程中只 要添 加 Server端 的 接 收 消 息 和 显 示 消 息 功 能 就 可 以 进 行 消 息 的 传 送 。在 CServer 类中像添加 OnAccept() 一 样 添 加 成 员 函 数 OnReceive() :void CServer:OnReceive(int nErrorCode)/ TODO: Add your specialized code here and/or call the base class CSocket:OnReceive(nErrorCode);(CLx2Dlg*)(Af

44、xGetApp()-m_pMainWnd)-ShowMsg();建 立 连 接 后 , 一 方 一 旦 发 送 数 据 , 另 一 方 的 CSocket 派 生 类 便 调 用 该 函 数 。 其 中 代 码 可 以 参考前面 OnAccept() 进行理解。在 CLx2Dlg 里 添 加 成 员 函 数 ShowMsg() :void CLx2Dlg:ShowMsg()char buf255;m_recv.Receive(buf, 255); / 接收消息到 buf 里面,长度 255 字节 CString msg;msg.Format(“%s“, buf);AfxMessageBox(m

45、sg); / 用 AfxMessageBox 函 数 显 示 接 收 到 的 字 符 串/ 这里注意 CString 类的用法同 样 地 , 逐 步 在 Lx1 工 程 中 添 加 消 息 接 收 函 数 :void CClient:OnReceive(int nErrorCode)/ TODO: Add your specialized code here and/or call the base class (CLx1Dlg*)(AfxGetApp()-m_pMainWnd)-ShowMsg(); CSocket:OnReceive(nErrorCode);13void CLx1Dlg:S

46、howMsg()char buf255;m_client.Receive(buf, 255); / 接收消息到 buf 里面,长度 255 字节 CString msg;msg.Format(“%s“, buf);AfxMessageBox(msg); / 用 AfxMessageBox 函 数 显 示 接 收 到 的 字 符 串最 后 的 收 尾 工 作 不 要 忘 记 , 即 在 对 话 框 销 毁 的 时 候 , 关 闭 Socket 连 接 , 释 放 资 源 。 以 下 以 Lx1 工 程 为 例 , 见 图 1.13。void CLx1Dlg:OnDestroy()图 1.13CD

47、ialog:OnDestroy();m_client.Close(); / 关闭套接字至 此 , 代 码 全 部 添 加 完 毕 。在两个 VC 中分别 按下 F5 键, 编 译执行 两个程序 , 就 可以进行 通信了 。 程 序运行过 程如下: 在 Lx2 中 按 下 侦 听 。 在 Lx1 中 输 入 地 址 后 按 下 “连 接 ”按 钮 。在 Lx1 的 文 本 框 内 输 入 字 符 , 按 下 “发 送 ”按 钮 , 则 Lx2 端 便 会 得 到 来 自 Lx1 的 消 息 , 如图 1.14 所示。14图 1.14【思考题】 改 造 程 序 结 构 。 上 面 的 程 序 能

48、做 到 双 向 发 送 消 息 , 但 是 两 个 程 序 必 须 成 对 使 用 , 即 一个是 Server 端 , 一 个 是 Client 端 ; 而 真 正 实 用 的 聊 天 程 序 即 使 使 用 了 Client/Server 模式, 也 必 须 将 其 整 合 , 使 其 所 有 的 功 能 都 在 一 个 程 序 中 实 现 , 以 增 加 适 用 性 。 试 改 造 结 构 , 将 两 个 程 序 的 功 能 整 合 在 一 起 。 界 面 参 见 。 添 加 程 序 功 能 。 以 下 几 点 可 供 参 考 : 用 AfxMessageBox( ) 显 示 消 息 显

49、 得 不 够 专 业 , 可 以 考 虑 制 作 一 个 双 文 本 框 的 界 面 , 让 发 送 的 消 息 在 下 面 一 个 文 本 框 中 输 入 , 接 收 的 消 息 在 上 面 的 文 本 框 中 显 示 。 可 考 虑 在 显 示 的 文 本 框 中 添 加 滚 动 条 让 消 息 具 有 往 下 滚 动 的 功 能 。 增 加 保 存 聊 天 记 录 的 功 能 。 界 面 可 参 考 图 1.15。图 1.15 为 简 化 操 作 , 本 实 验 直 接 利 用 了 CSocket 类的 Send 和 Receive 进 行 通 信 。 请 参 照 实 验 原 理 部 分 的 CSocketFile 类和 CArchive 类 ( 这 两 个 类 在 实 验 三 中 有 具 体 的 使 用 范 例 ) 的 说 明 以 及 通 信 的 流 程 图 对 其 进 行 改 造 ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报