1、工 作 原 理 - 电 子 白 板 有 两 种 实 现 模 型, 一 种 是 无 白 板 服 务 器, 因 此 仅 支 持 两 个 用 户直 接 连 结; 另 一 种 是 有 白 板 服 务 器, 原 则 上 不 限 制 同 时 上 线 人 数 和 交 谈 室 个数, 具 体 实 现 上 可 视 服 务 器 性 能 和 需 要 而 定。 本 文 要 介 绍 属 于 后 者。 - 当 用 户 需 用 白 板 与 他 人 交 流 时, 需 要 先 用 浏 览 器 连 到Applet 所 在 主 页,Applet 运 行 后 会 连 接 到 该 白 板 服 务 器, 和 服 务 器 建 立TCP 连
2、 接。 每 个 用 户 可 以 在 自 己 的 白 板 上( 嵌 在Applet 画 面 中) 绘 制 图 形 和 输 入 文 字,Applet 会 将 这 些 信 息 通 过 已 建 立 的 网 络 连 接 发 往 白 板 服 务 器, 并 不 断 侦 听、 接 收 来 自 白 板服 务 器 的 图 形 和 文 字 信 息, 将 其 再 现 在 用 户 的 白 板 中。 白 板 服 务 器 的 作 用 是不 断 侦 听、 接 收 来 自 各Applet 的 信 息, 并 将 其 发 其 他 用 户。 - 于 浏 览 器 JAVA Applet 的 限 制, Applet 能 发 该Apple
3、t 的 主 主 , 因 此 能 在 该Applet 所 在 主 上 运 行 白 板 服 务 器, Applet 能 建 立 和 白 板 服 务 器 的 。 能 - 一 个 实 用 的 电 子 白 板 该 具 以 本 能 用 户 在 浏 览 到 白 板 主 页 时, 需 后 能 行 交 流。 这 将 交 流 时 用 的 字, 要 时 可 限 。 用 户 能 currency1 交 谈 室 的 交 谈 主 “ 和 fi fl 现 有 的 交 谈 室, 并 能 建 立 的 交 谈 室。 可 以 currency1 该 电 子 白 板 的 用 和 需 要 一 些 限 。 用 户 能 和 在 同 一 交
4、 谈 室 中 的 用 户 交 流。 一 个 交 谈 室 的 信 息 于 的 交 谈 室 是 不 可 的。 白 板 具 有 一 些 ” 画 、 画 板( 仅 自 己 的 白 板) 用 户 的 能。 白 板 具 有 一 个 作 和 作 信 息 , 用 户 一 些 作 和 作 结 信 息, 这 可 以 用 户 用。 用 户 能 和 自 己 的 白 板 工 作。 - 白 板 的 实 用 , 可 以 ” 与windows 画 工 具 的 画 形、 形 能。 本 作 电 子 白 板 本 模 型 的 建 立, 有 入 这 些 能。 实 上, 要 面 要 介 绍 的 白 板 通 的 原 则, 以 上 能 是
5、的。 通 的 制 定 - 于JAVA 的 通 是TCP/IP, 所 以 需 在 其 上 建 立 电 子 白 板 的 用 。 的 模 型 将 用 服 务 器/ 户 的 / 模 。 可 以 currency1 需 要 实 现 的 白 板 能 制 定 通 , 中 、 图 形 输( 服 务 器 发 fl 和 户 发 fl 两 )、 文 字 输( 服 务 器发 fl 和 户 发 fl 两 )、 服 务 器 要 交 谈 室 员 单、 户 要 交 谈 室 员 单、 入 指 定 交 谈 室、 fi fl 交 谈 室、 建 立 交 谈 室、 / 交 流 。 - 于 已 经 依 靠TCP/IP 保 证 数 cur
6、rency1 输 的 确 性, 所 以 在 这 个 电 子 白 板的 通 的 中 在 保 证 能 的 前 尽 量 简 洁, 来 高 带 宽 利 用 率。 白 板 通 的 细 节 可 ” - 注 意 (S) 表 该 服 务 器 发 fl, 户 接 收; - (C) 表 该 户 发 fl, 服 务 器 接 收; - 数 currency1 格 表 引 号 之 间 表 字 符 串,(short) 表 短 整 形 数(2 字 节),(int) 表 整 形 数(4 字 节)。 (C) “log“ 用 户 字 符 串。 图 形 输( 户 发 fl)(C) “draw“ (int) (short) 直 线
7、起 点 横 坐 (short) 直 线 起 点 纵 坐 (short) 直 线 终 点 横 坐 (short) 直 线 终 点 纵 坐 。 图 形 输( 服 务 器 发 fl)(S) “draw“ (int) (short) 直 线 起 点 横 坐 (short) 直 线 起 点 纵 坐 (short) 直 线 终 点 横 坐 (short) 直 线 终 点 纵 坐 。 文 字 输( 户 发 fl)(C) “text“ 用 户 在 白 板 话 框 中 输 入 的 文 字 字 符 串。 文 字 输( 服 务 器 发 fl)(S) “text“ 文 字 输 入 者 姓 字 符 串 该 用 户 输
8、入 的 文 字 字 符 串。 服 务 器 要 交 谈 室 员 单(S) “refresh“ 交 谈 室1 主 字 符 串 交 谈 室1 中 的 用 户1 姓 字 符 串 交 谈 室1 中 的 用 户2 姓 字 符 串 . “complete“ 交 谈 室2 主 字 符 串 交 谈 室2 中 的 用 户1 姓 字 符 串 交 谈 室2 中 的 用 户2 姓 字 符 串 . “complete“ . 最 后 一 个 交 谈 室 主 字 符 串 最 后 一 个 交 谈 室 中 的 用 户1 姓 字 符 串 最 后 一 个 交 谈 室 中 的 用 户2 姓 字 符 串 . “complete“ “ok
9、“。 户 要 交 谈 室 员 单(C) “refresh“。( 服 务 器 收 到 此 命 令, 会 执行 前 面 的 服 务 器 要 交 谈 室 员 单 子 , 以 户 ) 入 指 定 交 谈 室(C) “join“ 申 入 的 交 谈 室 主 字 符 串。 fi fl 交 谈 室(C) “quit“。 建 立 交 谈 室(C) “new“ 申 建 立 的 交 谈 室 主 字 符 串。( 服 务 器 收 到 此 命 令, 会 自 动 在 该 用 户 原 来 所 在 的 交 谈 室 中 注 销, 并 该 用 户 交 谈 室的 一 员) 交 流(C) “pause“。 交 流(C) “conti
10、nue“。 - 以 上 本 电 子 白 板 软 件 所 遵 循 的 通 。 这 个 的 可 扩 充 性 很 强, 可 以 随 时 按 的 能 扩 充 。 ” 需 要 形 图 案, 则 可 将 ” 到 中 “circle“ (int) (short) 心 横 坐 (short)心 纵 坐 (short) 半 径。 编 实 现 - 序 服 务 器JAVA Application 和 户 端JAVA Applet 两 行。 - 编 中 需 要 注 意 以 几 点 服 务 器 序 不 要 用 户 端 接 入 时 建 立 用 户 线 , fi fl 交 谈 室 时 销 毁 线 的 工 作 流 。 因 有
11、 些 作 的 线 作 制 不 健 全, 在 线 销 毁 时 线所 占 资 源 不 能 被 完 全 释 放, 以 致 于 在 白 板 服 务 器 运 行 的 过 中 将 逐 渐 消 耗 掉 资 源。 所 以 在 服 务 器 初 始 化 时 按 照 最 大 允 许 同 时 上 线 的 用 户 数 建 立 所 有 用 户 服 务 线 。 这 些 线 将 待 户 端 接 入, 当 用 户 fi fl 交 谈 室 时线 并 不 销 毁, 而 是 用 户 数 currency1, 重 入 待 接 入 状 态, 一 个 用 户 服 务。 这 就 保 证 白 板 服 务 器 可 以 长 期 可 靠 运 行。
12、当 用 户 在 白 板 上 连 续 绘 画 时 可 能 产 生 大 量 的 图 形 数 currency1, 户 端Applet 若 在 白板 的AWT 事 件 处 理 序 中 完 将 这 些 数 currency1 输 服 务 器 的 任 务, 则 很 有 可 能 于 网 络I/O 的 瓶 颈 作 用, AWT 事 件 处 理 线 受 阻, 从 而 白 板Applet、浏 览 器、 其 他 在 运 行 的 用 软 件 的 界 面 相 性。 决 的 办 法 就 是 Applet 再 建 立 一 个 后 台 绘 图 数 currency1 输 线 , 白 板 的AWT 事 件 处 理 序 将 用
13、 户 的 绘 图 数 currency1 通 过 管 道 流(PipedStream) 输 这 个 线 后 就 返 回, 把 网 络 输 的 任 务 留 这 个 线 行。 在 服 务 器 和 户 端Applet 中, 每 一 个 子 的 实 现 都 要 建 立 一 个同 步 块(synchronize), 该 子 的 全 作 都 要 在 这 个 同 步 块 完 , 以 限 制 自 网 络 接 插 建 立 的 输 入 流 和 输 fl 流。 当 一 个 线 执 行 一 个 子 时 能 独 占 这 些 网 络 资 源, 而 的 线 不 能 这 些 资 源, 以 保 证 线能 完 整 确 执 行 子
14、 。 是 于 同 步 作 会 线 和 执 行 率, 所 以 要 在 确 保 子 完 整 执 行 的 前 尽 量 同 步 块 的 。于 中 的 数 currency1 型 有 字 符 串 有 整 形 数, 因 此 在 序 中 “ 用DataInputStream 和DataOutputStream 作 数 currency1 输 入 流 和 输 fl 流。 此 , 于UTF 格 的 文 本 支 持 中 文 字 符 , 在 字 符 串 中 已 长 信 息, 可 以 数 currency1, 在 本 序 的 网 络 通 信 中 的 字 符 串 全 用UTF 格 。 自 己 的 白 板 序 时, 可
15、以 currency1 需 要 用 其 他 文 本 格 和 编 则, 一 定 要 保 证 输 入流 和 输 fl 流 用 的 是 同 一 种 格 和 编 。 到 前Netscape Navigator 3.0 和Internet Explorer 3.0 前 用, 而这 两 种 浏 览 器 的JAVA 都 不 支 持 的JDK 1.1 , 所 以 在 本 序 的 户 Applet 中 有 用JDK1.1 有 的 。 - 先 介 绍 服 务 器 序 的 编 制。 需 确 定 主 要 的 几 个 其 员 数。 表” - ChatServer - 服 务 器 序 的 动 。 - ChatServer
16、() 建 立 服 务 器 管 理 界 面。 - initServer() 建 立 服 务 器 插 结, 初 始 化 交 谈 室 数 currency1, 按 照 允 许 同 时 上 线的 最 大 用 户 数 建 立 个 用 户 服 务 线 。 - go() 动 用 户 服 务 线 。 - quit() 中 用 户 服 务 线 , 服 务 器 插 结, 并 释 放 全 资 源。 - User Thread 的 子 , 实 现 用 户 服 务 线 , 处 理 服 务 器/ 户 会 话。 - run() 待 户 端 接 入; 户 端 接 入 后 初 始 化 网 络 资 源, 入 循 侦 听户 端 的
17、 状 态, 并 currency1 户 端 的 用 相 的 处 理 序。 - sendText() 按 照 文 字 输 子 , 接 收 用 户 发 fl 的 文 字 信 息, 并 发 同 一 交 谈 室 的 其 他 用 户。 - sendDraw() 按 照 图 形 输 子 , 接 收 用 户 发 fl 的 图 形 信 息, 并 发 同 一 交 谈 室 的 其 他 用 户。 - commandCenter() 服 务 器 接 收 到 的 指 令 “ 运 行 当 的 处 理 序。 - server_ask_refresh() 服 务 器 主 动 交 谈 室 员 单。 - server_answe
18、r_reresh() 户 要 交 谈 室 员 单。 - server_answer_log() 户 。 - server_answer_join() 用 户 入 指 定 交 谈 室 。 - server_answer_pause() 用 户 交 流 。 - server_answer_continue() 用 户 交 流 。 - server_answer_newRoom() 用 户 建 立 交 谈 室 。 - server_answer_quit() 用 户 fi fl 交 谈 室 。 - server_ask_text() 服 务 器 户 发 文 字 信 息。 - server_ask_d
19、raw() 服 务 器 户 发 图 形 信 息。 - refreshToAll() 服 务 器 所 有 在 线 户 端 的 交 谈 室 数 currency1。 - refreshToAllNotMe() 服 务 器 该 用 户 , 所 有 在 线 户 端 的 交 谈 室 数 currency1。 - socketClose() 用 户 申 fi fl 时 用, 网 络 插 结, 释 放 线 占 用 的 网 络 资 源。 - RoomGroup 保 currency1 所 有 交 谈 室 数 currency1, 直 接 处 理 与 交 谈 室 有 作。 - newRoom() 建 立 交 谈
20、 室。 - join() 入 指 定 交 谈 室。 - quit() fi fl 指 定 交 谈 室。 - getUsersName() 返 回 指 定 交 谈 室 的 用 户 。 - getRoomID() 按 照 交 谈 室 主 并 返 回 交 谈 室ID 号。 - Room 保 currency1 并 处 理 本 交 谈 室 用 户 数 currency1。 - join() 入 本 交 谈 室。 - quit() fi fl 本 交 谈 室。 - getUsersName() 返 回 本 交 谈 室 的 用 户 。 - DataBag “ 图 形 和 文 字 数 currency1。
21、- AboutDialog 生 About 话 框, 可 信 息。 - QuitDialog 生 QuitDialog 话 框, 用 于 确 是 结 fi 服 务 器 运 行。 - 户 Applet 的 其 主 要 员 数 ” - ChatApplet Applet 的 子 , 实 现Runnable 接 fl。 - 是 白 板Applet 的 心 , 完 与 用 户 交 流 和 与 服 务 器 通 的 任 务。 - init() 初 始 化Applet 用 户 界 面。 - run(): 循 侦 听 来 自 白 板 服 务 器 的 信 息, 用commandCenter 命 令 处 理 序。
22、 - start() 生 并 动Applet 线 。 - stop() 中 Applet 线 。 - destroy() 中 后 台 图 形 数 currency1 线 , 用 网 络 资 源 数。 - socketClose() 所 有 的 网 络 插 结 和 通 流。 - openSocket() 建 立 网 络 插 结 和 通 流。 - commandCenter() 中 处 理 来 自 用 户 和 服 务 器 以 来 自Applet 的 命令, 用 相 的 处 理 序。 - client_ask_refresh() 户 交 谈 室 数 currency1。 - client_answe
23、r_refresh() 户 接 收 服 务 器 发 的 交 谈 室 数 currency1。 - client_ask_log() 申 到 服 务 器。 - client_ask_join() 申 入 指 定 交 谈 室。 - client_ask_pause() 交 流。 - client_ask_continue() 交 流。 - client_ask_newRoom() 申 建 立 交 谈 室。 - client_ask_quit() fi fl 交 谈 室。 - client_ask_text() 发 用 户 输 入 的 文 字 信 息。 - client_answer_text()
24、接 收 服 务 器 发 的 其 他 用 户 的 文 字 信 息。 - client_answer_draw() 接 收 服 务 器 发 的 其 他 用 户 的 图 形 信 息。 - refreshRoomList() 交 谈 室 表。 - refreshUserList() 指 定 交 谈 室 中 的 用 户 表。 - printChat_Area() 将 该 用 户 和 来 自 服 务 器 的 其 他 用 户 的 输 入 的 文 字 用 指 定 格 在Applet 的 交 谈 文 本 框 中。 - sendText() 断 用 户 输 入 的 文 字 是 有 字 符 串, 若 有 则 用 发
25、文 字 数。 - drawBoard_Canvas() 按DataBag 的 , 在Applet 的 白 板 上 绘 图。 - boardCanvas_MouseDrag() 当 在 白 板 上 动 时 用 此 数, 将 “ 数 currency1 发 后 台 网 络 输 线 。 - logButton_Clicked() 当 用 户 单 Applet 的 ” 时 用 此 数, 建 立 网络 插 结 和 后 台 网 络 输 线 。 - 其 他 一 用 户 界 面 事 件 处 理 数 与 用 户 交 流, 接 收 用 户 输 入, 直 接 处 理 用commanCenter 数 执 行 用 户
26、命 令。 - RoomData currency1 该 交 谈 室 的 主 和 用 户 的 数 currency1 - addUser() 在 该 交 谈 室 中 用 户 。 - removeUser() 在 该 交 谈 室 中 用 户 。 - getUsersName() 返 回 所 有 在 该 交 谈 室 中 的 用 户 。 - Rooms Vector 的 子 。 currency1 所 有 交 谈 室 的 用 户 数 currency1。 - getRoomByName() 按 交 谈 室 主 返 回 指 定 交 谈 室 的RoomData 。 - addElement() RoomD
27、ata 。 - SendDrawData Thread 的 子 , 实 现 后 台 网 络 输 线 。 - run() 循 侦 听 来 自Applet 主 线 的 图 形 信 息, 并 将 其 通 过 网 络 接 插 生 的 输 fl 流 发 服 务 器。 - quit() 该 线 与Applet 主 线 的 连 接 流。 - Logo Canvas 的 子 。 用 于 在Applet 中 图 信 息。 - 此 序 中 定 几 个 , 可 以 序 的 处 理 制 , 序 的 可 性 和 可 性。Applet 的 图 形 文 件 是“cdownlogo.jpg“(457 60), 服 务 器 的 图 形 文 件 是“icon.gif“(19 17)。 服 务 器 占 用 的 端 fl 号 10000。 以 上 各 可 以 视 需 要 。