已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳师范大学学士学位论文 I 摘摘 要要 在网络飞速发展的今天 互联网成为人们快速获取 发布和传递信息的重 要渠道 它在人们政治 经济 生活等各个方面发挥着重要的作用 互联网上存在大量 的信息所以信息交换也显得尤为重要 人们一直在寻找一种方便 低廉的交流信息的工 具 因此网上聊天便成为人们的首选 本论文通过 JAVA 的 Socket 实现了一个局域网的 聊天室 基于 JAVA 的聊天室的设计与实现 本聊天室服务器包括显示在线用户 日 志管理 聊天信息管理 发送系统信息等功能 客户端包括登录 注册 公聊 私聊传 送文本文件等功能 本论文提出一个局域网聊天软件的解决方案 该聊天软件包括服务器端和客户端两 个模块 客户端通过服务器端进行通信 服务器端模块主要实现了服务器的配置和数据 的传递 客户端模块主要实现了用户注册 登录 文字聊天等功能 该软件能够帮助企业在局域网内搭建起自己的聊天系统 避免企业内部员工使用类 似 QQ 等软件泄露内部信息 但是该软件只实现了聊天的基本功能 还有很多不足之处 需要改进 关键词关键词 因特网 聊天室 JAVA 套接字 全套设计加扣 3012250582 沈阳师范大学学士学位论文 II ABSTRACT In network rapid development today Internet become people to quickly getrelease the important channels and information it in people politics economy life aspects played an important role The presence of large amounts of information on the Internet so information exchange also appear particularly important People have been looking for a kind of convenient cheap communication tools so online chatting became a priority for most people This paper by JAVA Socket implements a LAN chat room based on JAVA chat room of design and implementation This chatroom server including shows the online user log management chat information management send system information and other functions Clients include login registration male chat private chat transmit text files and other functions This paper presents a LAN chat software solutions This chat software including server and client two modules client through communication on the server The server module mainly realizes the server configuration and data transmission The client module mainly realizes the user register login text chat and other functions This software can help enterprises in the local area network set up their own chat system avoid the enterprise internal staff use similar QQ software such as internal information disclosure but the software only realize the basic function of the chat and many shortcomings need improvement Key words Internet chat rooms java socket 沈阳师范大学学士学位论文 III 目目 录录 第一章绪论 4 1 1 开发背景 4 1 2 国内外发展状况 4 1 3 系统设计目标 4 1 4 研究的意义 5 第二章系统开发所采用的技术 6 2 1 JAVA 技术 6 2 2 JAVA 语言在网络上的应用 6 2 3 TCP IP 协议常识 6 2 4 端口号 7 2 5 Socket 的简介 7 2 6 Eclipse 3 0 开发环境 9 第三章局域网聊天系统的需求分析 10 3 1 可行性分析 10 3 1 1 技术可行性 10 3 1 2 经济可行性 11 3 1 3 操作可行性 11 3 2 功能分析 11 第四章系统总体设计 13 4 1 系统通信模型与拓扑结构设计 13 4 1 1 即时通讯系统的一般模型 13 4 1 2 即时通讯系统服务的拓扑模型 13 4 2 功能设计 14 4 2 1 服务器端功能设计 15 4 2 2 客户端功能设计 15 第五章系统详细设计与实现 19 5 1 服务器 19 5 2 登录 20 5 3 注册 21 沈阳师范大学学士学位论文 IV 5 4 客户端主聊天界面 23 5 5 服务器音乐播放 24 5 6 文件传送 25 第六章系统测试 28 6 1 测试概论 28 6 2 局域网聊天室系统采用的测试方法 28 6 3 局域网聊天室功能测试 28 结 论 31 致 谢 32 参考文献 33 附录一 代码 34 沈阳师范大学学士学位论文 5 第一章绪论 1 1 开发背景开发背景 根据当前网络的需求 网络聊天越来越受到各种网民所青睐 因此开发网络聊天 是相当有必要 而且在网站内增加聊天功能 它不仅可以提高网站的访问量 同时可 以留着访客 更重要的是让访客透过聊天室实时的互相交流 而本人也学习过 JAVA 语言 对网络编程也较有兴趣 为了更好的考验自己对 JAVA 语言的掌握程度 本人 就决定以 基于 JAVA 的网络聊天室 为毕业设计 希望通过这一次能进一步提高本 人的网络开发编程的能力 1 2 国内外发展状况国内外发展状况 在国外 随着计算机网络日新月异的发展 人们的交流方式越来越多 传统的交 流方式已经难以满足人们的交流的需求了 在互联网上即时的和好友取得联系 已经 成为当今社会人们主流的联系方式 同时 即时通信系统对现代企业也有着重大意义 它能实现快速人际交流 数据共享 从而提高效率和生产力 实时通信为诸企业开拓 了网络应用的新领域 自从它诞生以来 以实时交互 资费低廉等优点 受到广大个 人用户的喜爱 已经成为网络生活中不可或缺的一部分 越来越多的企业已开始认识 到即时通信工具能够带来极高的生产力 借助它的应用 来提高业务协同性及反馈的 敏感度和快捷度 因此 两台计算机之间进行即时通讯 发送文件等交流方式已经成 为必然潮流 因此出现了 Skype QQ MSN 等聊天工具 然而 QQ MSN 等聊天工 具虽然方便 实用 但是 娱乐功能太多 有很多吸引人的娱乐功能 从一定程度上 来说 是一种娱乐工具 不能作为用于即时通讯的专用工具 1 3 系统设计目标系统设计目标 聊天系统主要关注两个方面 即服务器端和客户端 下面分析这两个方面所要完 成的任务如下 1 服务器端的任务 服务器端应当建立一个 Server Socket 并且不断进行侦听是否有客户端连接或者 断开连接 服务器端应当是一个信息发送中心 所有客户端的信息都传到服务器端 由服务器端根据要求分发信息 以上就是服务器端最主要的两个任务 不难看出 服务器端的任务并不复杂 2 客户端的任务 客户端应该完成的工作包括 与服务器端建立通信通道 向服务器端发送信息 接 收来自服务器的信息 相对服务器而言 客户端的任务更加简单 有了以上的简单分 析 可以知道 解决上述四个问题 即完成了该聊天系统的核心 客户端和服务器必须保持随时随地的连接 这有别于普通 Web 浏览的连接方式 在使用浏览器访问服务器时 先由客户端发出 HTTP 协议 然后服务器响应处理这个 沈阳师范大学学士学位论文 6 客户端的响应 再返回处理结果 请求 Request 和响应 Response 是一种一对一 的前后因果关系 而在基于 Socket 的聊天系统中 客户端发出聊天信息的同时 客户 端也在接受服务器发送过来的其他人的聊天信息 因此 请求和响应不存在那种前后 对应关系 是两种分别独立进行的进程 因为服务器任何时候都可能发送信息到客户 端 因此 客户端和服务器一旦建立连接 必须能让服务器在以后发送中寻找定位到 这个连接 在速度性能方面 聊天系统提出了更高的要求 在网络连接的薄弱环节 I O 通信 方面 要求能够实现无堵塞地 流畅地数据读写 在面对几百个甚至更多的客户端同 时发出连接信息的情况下 服务器要求能够保持高性能的并发处理机制 迅速地完成 这几百个并发请求的处理和发送任务 在扩展性和伸缩性方面 聊天系统也提出了一定的要求 当一台服务器不能满足 要求时 必须在客户端不知晓的情况下 通过不断增加服务器就能方便地拓展聊天系 统的整体处理能力 对于客户端用户来说 这些服务器群都象征一个统一的服务器 不需要他们在进入聊天室之前先选择具体的服务器 也没有单个聊天室最大人数的限 制 如果可以 服务器群可以支撑一个巨大容量的聊天室 1 4 研究的意义研究的意义 随着互联网逐步普及 人们的生活和工作也越来越离不开信息网络的支持 将会 有越来越多的人利用网上资源 享受不断发展和完善的网络服务 以此来提高工作效 率和水平 随着我国经济发展和网络的普及 网络技术也越来越多地被应用于日常工 作之中 在程序设计领域 面向对象的编程技术正在逐步代替面向过程的程序设计技 术 成为计算机应用设计开发的主流 尤其在网络技术开发中 面向对象的 Java 语言 编程和相关的 JAVA 技术正在以前所未有的速度发展 网上购物 网上银行 远程教 学 网络聊天 网络游戏等都开始使用 JAVA 技术 而且 JAVA 使平台无关性的思想 成为现实 独立的 JAVA 程序可以被编译为与平台无关的字节码 这种字节码可以运 行在任何拥有 JAVA 解释器的机器上 真正降低了企业成品和程序员的负担 对于人 与人之间通过网络的沟通和交流 聊天室是人们最常见 最直接的交流的方式 本聊 天系统以聊天交流为主 为广大用户提供一个借助网络进行人际交往的平台 也是网 络与现实最贴近的实用型应用 本文所介绍的网络聊天系统是基于开放的 JAVA 应用 程序开发设计的 其主要特性是能动态 实时的完成信息的传递 且具有高效的交互 性 有效的处理客户请求且具有脱离数据库技术方法 易于维护和更新 沈阳师范大学学士学位论文 7 第二章系统开发所采用的技术 2 1 JAVA 技术技术 美国硅谷有一句行话 每 10 年 15 年有一次轮回 最近的一次轮回就是从 Java 开始 JAVA 是一个由 Sun 公司开发而成的新一代编程语言 使用它可在各式各样不 同种机器 不同种操作平台的网络环境中开发软件 不论你使用的是哪一种 WWW 浏 览器 哪一种计算机 哪一种操作系统 只要 WWW 浏览器上面注明了 支持 JAVA 你就可以看到生动的主页 JAVA 正在逐步成为 Internet 应用的主要开发语言 它彻底 改变了应用软件的开发模式 带来了自 PC 机以来又一次技术革命 为迅速发展的信息 世界增添了新的活力 JAVA 语言有下面一些特点 简单 面向对象 分布式 解释执行 安全体系结构 中立 可移植 高性能 多线程以及动态性 丰富的类库 JAVA 提供了大量的类以满足网络化 多线程 面向对象系统的需要 语言包提供的支持包括字符串处理 多线程处理 数学函数处理等 可以用它简单地 实现 JAVA 程序的运行平台 实用程序包提供的支持包括哈希表 堆栈 可变数组 时间和日期等 输入输出包用统一的 流 模型来实现所有格式的 I O 包括文件系统 网络 输入低级网络包用于实现 Socket 编程 抽象图形用户接口包实现了不同平台的 计算机的图形用户接口部件 包括窗口 菜单 滚动条 对话框等 使得 JAVA 可以 移植到不同平台的机器 网络包支持 Internet 的 TCP IP 协议 提供了与 Internet 的接口 它支持 URL 连接 WWW 的即时访问 并且简化了用户 服务器模型的程序设计 JAVA 和 C C 对于变量声明 参数传递 操作符 流控制等使用了相同的传统 使得熟悉 C C 的程序员能很方便地进行编程 同时 JAVA 为了实现其简单 鲁棒 安全等特性 也摒弃了 C 和 C 中许多不合理的内容 2 2 JAVA 语言在网络上的应用语言在网络上的应用 JAVA 程序可以获取网络上结点的图象 声音 HTML 文档及文本等资源 并可 以对获得的资源进行处理 例如 JAVA 程序可以每隔一定时间读取某结点提供的最新 数据 并以图表的形式显示出来 在编程处理上 一般先生成一个 URL 类型的对象 然后用 JAVA 中相应的方法 method 获取该对象所代表的资源 2 3 TCP IP 协议常识协议常识 TCP IP Transmission Control Protocol Internet Protocol 是传输控制协议 网际协议 的缩写 TCP IP 是当今网络互联的核心协议 TCP IP 协议的体系结构共有四个层次 即应用层 传输层 网络互联层和网络接口层 IP 协议的作用 第一 它是网络层的协议 提供互联网上数据传输的统一格式 第二 提供不可靠的无连接的服务 第三 定义了互联网上的传输数据的基本单元 沈阳师范大学学士学位论文 8 提供了供路由选择的信息 没有差错校验和处理的机制 TCP 协议的功能 差错控制 可靠性 面向连接 分段 Segment 端口号 TCP 是传输控制协议 是面向连接的提供了一种可靠的传输服务 它用三次握手和滑 动窗口机制来保证传输的可靠性 及进行流量控制 应用程序为了传输数据会调用 TCP 将数据和对应的参数传给 TCP 将 TCP 数据 包封装在 IP 包内 通过网络送给目的 TCP 接收方 TCP 在接收到数据后通知上层应 用程序 TCP 将保证接收数据的正确性 在实现 TCP 的主机上 TCP 可以被看成是一 个模块 和文件系统区别不大 TCP 也可以调用一些操作系统的功能 TCP 不直接和 网络打交道 控制网络的任务由专门的设备驱动模块完成 TCP 只是调用 IP 接口 向 TCP 提供所有 TCP 需要的服务 2 4 端口号端口号 有的时候 一个 IP 地址不能完整的标识一台服务器 这是因为一台物理性的计算 机同时运行着多个应用程序 这就需要我们来区别同一台机子上的不同的服务 所以 就在传输层和应用层上设置接口 就是端口 端口实际是一个 16 位长的地址 他的范 围是 0 65535 之间 其中 0 1023 是熟知端口 主要是给提供服务的应用程序使用 这些端口是所有应用进程都知道的 1024 65535 为一般端口 也称动态端口 连接端 口 用来随时分配要求通信的个客户端应用程序 在数据传输过程中 各种服务器不 断的检测分配给他的端口 一边发现要求和他通信的客户端 2 5 Socket 的简介的简介 Socket 简称套接字 用于实现网络上客户和服务器之间的连接 也就是说网络上 两个或两个以上双工方式通信的进程之间总有一个连接 这个连接的端点成为套接字 套接字是在比较低的层次上通信的 具体的说 一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求 当一个连接请求到达时 客户端和服武器端建立一个通信连接 在连接过程中 客户 端被分配一个本地端口与一个 Socket 建立连接 客户端通过写 Socket 来通知服务器 以读 Socket 中的信息 类似的服务器也获得一个本地端口 它需要一个新的端口号来 侦听原始端口上的其他连接请求 服务器也通过它的本地端口连接一个 Socket 通过 读写和客户端通信 2 5 1 Socket 程序的工作过程程序的工作过程 1 建立 Socket 连接 在通信开始之前由通信双方确认身份 建立一条专用的虚拟 连接道 2 数据通信 利用虚拟连接通道传送数据信息进行通信 3 关闭 通信结束时 再将所建的虚拟连接拆除 具体如下如图 2 1 所示 沈阳师范大学学士学位论文 9 图 2 1 Socket 程序的工作过程 2 5 2 三次握手协议三次握手协议 第一次握手 原主机发送一个带有本次连接的序号的请求的一个数据帧 第二次握手 目的主机收到请求后 如果同意连接 则发回一个带有一个本次连 接序号和源端机连接序列号的确认 第三此握手 源端机收到含有两次初始序列号的应答后 再向目的主机发送一个 带有两次连接的序列号的确认 具体过程如下如图 2 2 所示 1 服务器 serversocket 2 监听 4 连接 5 读 6 写 7 关闭 3 客户端 socket 6 读 5 写 7 关闭 沈阳师范大学学士学位论文 10 图 2 2 三次握手协议 2 6 Eclipse 3 0 开发环境开发环境 Eclipse 是替代 IBM Visual Age for Java 以下简称 IVJ 的下一代 IDE 开发环境 通过开发插件 它能扩展到任何语言的开发 甚至能成为图片绘制的工具 Eclipse 是 一个开放源代码的项目 任何人都可以下载 Eclipse 的源代码 并且在此基础上开发自 己的功能插件 同时可以通过开发新的插件扩展现有插件的功能 比如在现有的 Java 开发环境中加入 Tomcat 服务器插件 它可以无限扩展 而且有着统一的外观 操作和 系统资源管理 Eclipse 有着非常丰富的插件资源 更新速度很快 功能很强大 界面友好 扩展 性好 用户可以根据自己需要随心所欲的开发各种插件来扩展它 并且 Eclipse 是开源 的免费软件 本系统的开发就使用了插件 Lomboz 3 1 0 emf sdo runtime 2 0 0 和 org objectweb lomboz 3 0 1 N2005010 沈阳师范大学学士学位论文 11 第三章局域网聊天系统的需求分析 对软件需求的深入理解是软件工作者获得成功的前提条件 只有真正满足用户需求 的 软件才是有用的软件 系统需求分析将要回答的问题是用户需要什么样的系统 系统 必须做些什么等问题 只有锁定目标 才能更有效率 更正确的工作 3 1 可行性分析可行性分析 从技术 经济和操作三个方面对系统的可行性做出了分析 确定了系统是否值得 实现 可行性分析是现代软件工程不可或缺的重要组成部分 对问题的可行性做详细 认真的可行性研究 可以避免很多不必要的浪费 确保用最小的代价在尽可能短的时 间内确定问题是否能够解决 3 1 1 技术可行性 经过对系统需求的认真分析 综合各种计算机高级语言的特性和适应范围 最终 决 定选择纯面向对象的 Java 语言来完成我的毕业设计 Java 是 Sun Microsystem 公司 的 James Gosling 开发的编程语言 Sun 公司的口号就是 网络就是计算机 Java 能使 所有 东西从桌面计算平稳的转变为基于网络的计算 它是专门为此而建立的 并显然 是为了 完成这个任务而来的 使用 Java 我们可以相对轻松的编写一个有条理的网络 程序 下 面就技术可行性方面 对 Java 语言作简要介绍 Java 是一种简单的 面向对象的 健壮的 安全的 解释的 与平台无关的 多 线 程 动态的计算机语言 Java 的开发环境有不同的版本 Sun 公司相继的推出了 J2ME J2SE J2EE 三大平台 尤其是 J2SE 是 Java 2 标准平台 广泛用于工作站 PC 机 被 称为 互联网上的世界语 这些为我们开发系统提供了强大的平台支持 而且 Java 在 互联网方面具有得天独厚的优势 也是最吸引我们的地方之一 Java 最初是为家用电器进行集成控制而设计的一种语言 因此它必须简单明了 Java 摒弃了 C 中容易引发程序错误的一些特性 如指针 结构以及内存管理等 Java 提供了丰富的库类 可以帮助我们很方便的开发 Java 程序 Java 致力于检查程 序在编 译和运行时的错误 Java 也是一种强类型的语言 其类型检查比 C 还要严 格 类型检查帮助我们检查出许多开发早期出现的错误 Java 自己负责内存管理 提 供了垃圾回收机制 有效的避免了 C 中最头疼的内存泄露问题 Java 的安全性可以 从两个方面得到保证 一方面 在 Java 语言里删除了指针和释放内存等 C 功能 避免了非法内存操作 另一方面 通过 Java 的安全体系架构来确保 Java 代码的安 全性 Java 作为一种网络语言 其源代码被编译成一种结构中立的中间文件格式 只 要有 Java 运行系统的机器都能执行这种中间代码 Java 源程序被编译成一种与机器 无关的字节码格式 在 Java 虚拟机上运行 Java 语言的一个重要的特性就是在语言 沈阳师范大学学士学位论文 12 级别支持多线程的程序设计 使得在编写多线程程序时十分的简单 JVM 很好的管理 多个线程同时运行过程中了资源共享问题 Java 的动态性是其面向对象设计方法的扩 展 它允许程序动态地装入运行过程中所需要的类 Java 编译器不是将对实例变量和 成员函数的引用编译为数值引用 而是将符号引用信息在字节码中保存下来 传递给 解释器 再由解释器在完成动态连接类后 将符号引用信息转换为数值偏移量 这样 对类中的变量和方法进行更新时就不至于影响存的代码 3 1 2 经济可行性 在 Java 诞生之初 Sun 及其明智的制定了一个开放的发展策略 为 Java 的发展 创造了一个良好的环境 可以说正是这个策略造就今天繁荣兴旺的局面 也因此 Java 与 开源结下了不解之缘 Java 世界中 开源组织与非盈利机构发挥到了极致 许多出 色的 工具都出自它们之手 比如 JUnit Cactus Tomcat Struts JBoss Eclipse ANT Xerces Hibernate Axis AspectJ 等等 许多工具还会出现在我们的咖啡馆中 扮演 重要的角色 Java 世界中 便宜无好货绝对不成立 这些工具拥有足以和商业软件媲 美 的质量 很多商业 IDE 还集成了这些工具 开源 不仅仅是 Java 语言 还包括 开发工 具和框架 相对廉价的开发成本 这就使得个人使用 Java 作为开发平台成为 可能 3 1 3 操作可行性 与 C C Visual Basic Delphi 等计算机语言不同 Java 技术特指应用 而不 是 Java 语言 Java 技术广泛应用于各种设备 为你提供各种工具 信息以及好玩的 游 戏 Java 为我们提供了可视化的图形 API 基于此我们就能开发良好的 GUI 为 用户提 供方便的操作环境 同时 Java 丰富的类库资源 使得我们在设计的时候可以 通过简单 的继承就可以实现许多复杂的功能 Java 优越的可移植性大大提高的软件的 可重用性 用 Java 开发的软件 可以不经过任何的更改就移植到支持 Java 虚拟机 的操作系统上 真正的实现了 一次编译 到处运行 3 2 功能分析功能分析 聊天室软件共分为服务器端和客户端两部分 服务器端程序主要负责侦听客户端 发来的消息 客户端需登陆到服务器才可以实现正常聊天功能 服务器端的主要功能如下 在特定的端口上进行侦听 等待客户段连接 用户可以 配制服务器的侦听端口 默认端口为 8000 向已经连接到服务端的用户发送系统消息 统计在线人数 当停止服务时 断开所有用户连接 客户端的主要功能如下 连接到已经开启聊天服务的服务端 用户可以配制要连接 服务器端的 IP 地址与端口号 用户可以配制连接后显示的用户名 当服务器端开启 后 用户可以随时登陆和取消 用户可以向所有人或者某一个人发送消息 沈阳师范大学学士学位论文 13 功能流程图如下 图 3 1 功能流程图 服务器 serversocket 监听 建立与客户端连接的套接字 1 读客户端信息 2 向客户端转发信息 关闭服务器 客户端 socket 1 读服务端信息 2 向服务器写信息 关闭客户端 启动 AppServer 启动 ChatClient 登录 注册 沈阳师范大学学士学位论文 14 第四章系统总体设计 总体设计是回答系统应该如何实现 这个问题 它要完成的主要任务是划分出组 成系统的物理元素 设计软件结构 也就是确定系统中每个程序是由哪些模块组成 以及各个模块之间的关系 4 1 系统通信模型与拓扑结构设计系统通信模型与拓扑结构设计 4 1 1 即时通讯系统的一般模型 即时通讯服务有两个实体 发送者和接受者 即时通讯协议定义了即时通讯服务 发信者和接受者之间的交互作用 即时通讯服务与其他邮件服务不同之处在于 即时 消息本身足够的小 便于快速交付到接受者 个体 用户代理 即时通讯系统的模型用图4 1表示 图4 1 即时通信系统的一般模型 该模型显示了通信系统服务器端和客户端之间的联系 首先配制并启动服务器端 进行端口的侦听 当有用户登陆时 在文本区能显示用户XXX上线 并将在线总人数 通知其他客户端 当客户端1 向客户端2 发送信息时 信息首先发送给服务器端 通 过服务器的中转 再传递给客户端2 系统支持多点聊天 一个客户端可以通过群聊的 方式向所有其他的客户端发送信息 4 1 2 即时通讯系统服务的拓扑模型 沈阳师范大学学士学位论文 15 图 4 2 服务的内部拓展结构 如图4 2 现在不少即时通讯系统服务的内部拓扑中采用模式一 也有极其个别系 统在即时通讯服务上面采用模式二 例如 深圳腾讯的QQ 服务中的即时通讯服务 发 信者首先考虑直接与即时收信箱进行通讯 如果发现直接通讯超时 会转为使用服务 器中转完成通讯 模式一是一种非常成熟的模式 大多数TCP IP 应用系统 例如 SMTP 服务 DNS 服务 WWW 服务等都是使用这种模式 模式二 对于模式一是 一个技术上的修正 虽然这个修正带来了新的问题 但是其实用性是不可质疑的 本 系统主要采用模式二的变体结构 由一个主服务器承担消息的接受和转发工作 同时 监听用户上下线信息 以便通过其他已登陆用户 4 2 功能设计功能设计 当用户聊天时 将当前用户名 聊天对象 聊天内容和是否私聊进行封装并且序 列化 然后与服务器建立 Socket 连接 再用对象输出流包装 Socket 的输出流将聊天信 息对象发送给服务器端 当用户发送聊天信息时 服务端将会收到客户端用 Socket 传 输过来的聊天信息对象 然后将其强制转换为 Chat 对象 并将本次用户的聊天信息对 象添加到聊天对象集 Message 中 以供所有聊天用户访问 接收用户的聊天信息是由 沈阳师范大学学士学位论文 16 多线程技术实现的 因为客户端必须时时关注更新服务器上是否有最新消息 在本程 序中设定的是 1 秒刷新服务器一次 如果间隔时间太短将会增加客户端与服务器端的 通信负担 而间隔时间长就会让人感觉没有时效性 所以经过权衡后认为 1 秒最佳 因为每个用户都不可能在 1 秒内连续发送信息 当每次用户接收到聊天信息后将会开 始分析聊天信息然后将适合自己的信息人性化显示在聊天信息界面上 4 2 1 服务器端功能设计 在 Internet 上的聊天程序一般都是以服务器提供服务端连接响应 使用者通过客户 端程序登录到服务器 就可以与登录在同一服务器上的用户交谈 这是一个面向连接 的通信过程 因此 程序要在 TCP IP 环境下 实现服务器端和客户端两部分程序 服务器端工作流程 服务器端通过系统调用创建一个 ServerSocket 与指定的本地端口绑定 就可以在 端口进行侦听 如果有客户端连接请求 则创建一个 Socket 将客户端地址赋给这个 Socket 然后登录成功的客户就可以在服务器上聊天了 服务器程序模块 AppServer java 服务器与客户间通过套接口 Socket TCP 连接 在 java 中使用套接口相当简单 Java API 为处理套接口的通信提供了一个类 Socket 使得编写网络应用程序相 对容易 服务器采用多线程以满足多用户的请求 并通过创建一个 ServerSocket 对象 来监听来自客户的连接请求 默认端口为 8000 然后无限循环调用 accept 方法接受客 户程序的连接 服务器具有以下功能 1 启动服务 建立侦听 接受客户端连接 2 从流中读取经过序列化的对象 3 分析读取的对象进行相应的操作 登录信息的验证反馈 注册信息的验证和反 馈 转发聊天信息等 4 向客户端发送系统消息 5 保存日志 6 关闭服务 并向客户端发送服务器关闭消息 当用户发送聊天信息时 服务端将会收到客户端用 Socket 传输过来的聊天信息对 象 然后将其强制转换为 Chat 对象 并将本次用户的聊天信息对象添加到聊天对象集 Message 中 以供所有聊天用户访问 4 2 2 客户端功能设计 当用户聊天时 将当前用户名 聊天对象 聊天内容和是否私聊进行封装并且序 列化 然后与服务器建立 Socket 连接 再用对象输出流包装 Socket 的输出流将聊天信 息对象发送给服务器端 当用户发送聊天信息时 服务端将会收到客户端用 Socket 传 输过来的聊天信息对象 然后将其强制转换为 Chat 对象 并将本次用户的聊天信息对 沈阳师范大学学士学位论文 17 象添加到聊天对象集 Message 中 以供所有聊天用户访问 接收用户的聊天信息是由 多线程技术实现的 因为客户端必须时时关注更新服务器上是否有最新消息 在本程 序中设定的是 1 秒刷新服务器一次 如果间隔时间太短将会增加客户端与服务器端的 通信负担 而间隔时间长就会让人感觉没有时效性 所以经过权衡后认为 1 秒最佳 因为每个用户都不可能在 1 秒内连续发送信息 当每次用户接收到聊天信息后将会开 始分析聊天信息然后将适合自己的信息人性化显示在聊天信息界面上 客户端工作流程 客户端程序相对简单 只需要建立一个 Socket 与服务器端连接 成功后通过这个 Socket 来发送和接收数据就可以了 功能流程说明如下 1 启动服务器程序 服务器端创建一个 ServerSocket 对象 指定端口号 2 ServerSocket 对象等候客户端的连接请求 3 启动客户端程序 登录用户 如果未注册 先注册再登录 登录成功进入聊天 室用户界面 4 客户端创建一个 Socket 对象 指定主机地址和端口号 向服务器发送连接请求 5 服务器端收到客户端请求 建立一条 TCP 连接 再创建一个 Socket 对象与客户 端的 Socket 对象进行通信 6 服务器端和客户端分别建立字节输入 输出流 进行数据传输准备 7 服务器端和客户端通过各自的字节输入流获得对方发送过来的数据 通过字节 输出向对方发送数据 8 一方决定结束通信 向对方发送结素信息 另一方收到结束信息后 双方分别 关闭各自的 TCP 连接 9 对象停止等候客户端连接请求 1 登录程序模块 ChatClient java 是客户端程序登录界面 负责用户帐号信息的验证与接收服务器的反馈 客户端 请求连接 服务器的 accept 方法建立与客户端的套接字连接 客户端将登录信息封装 成 Customer 对象通过输出流发送服务器 等待服务器的验证 服务器反馈验证信息 客户端根据反馈信息进行登录和登录信息错误处理 2 注册程序模块 Register java 为客户端程序注册界面 负责用户帐号信息的注册验证与反馈 注册模块的原理 跟登录模块基本相同 注册信息封装成 Register Customer 对象 但服务器只验证用户 名 且只要求用户名不重复 服务器检验注册信息文件中的用户名 若不重复则反馈 注册成功的信息 其他的注册信息 密码 年龄 邮箱 合法性都交给注册模块自己 完成 沈阳师范大学学士学位论文 18 3 客户聊天主程序模块 ChatRoom java 客户通过 Socket InetAddress port 建立与服务器的连接 客户端通过构造 ObjectInputstream ObjectOutputstream 与服务器建立输入输出流 然后双方通过该输 入输出流来相互传递信息 服务器一旦收到客户方的连接请求 服务器 accept 方法返 回一个新建的 Socket 对象 客户端接受服务器传来的聊天信息进行处理后显示在自己 的聊天纪录中 同样客户端要发送文件和信息时也向服务器发送请求 服务器同样通 过 accept 方法返回一个 Socket 对象 客户端就可也进行相应的操作 聊天客户端必须具有以下功能 1 连接服务器 发送用户登陆请求 2 向服务器发送聊天信息 3 接收服务器转发的了信息 4 接受服务器发送的系统消息 因为使用了 while true 无限循环 使得客户端能不断更新聊天纪录 实现了实时 聊天 这里我们设置的更新周期为 1s 这样使服务器的负担不会太重 1s 的等待时间 也使得用户能够接受 4 音乐播放程序模块 MultiMidiDemo java 根据 JAVA 系统饿 MIDI 功能来创建一个 Sequencer 对象 使用 Javasound 来处 理 MIDI 声音文件 在创建好 Sequence 类对象之后 就可以播放该 MIDI 声音文件了 播放的步骤如下 1 调用音序器 Sequence 对象 中的 open 方法 使声音播放设备处于准备状态 2 调用音序器的 start 方法 开始播放声音文件 3 调用 close 方法结束播放 并释放资源 局域网聊天系统 服务器 查看服务器 客户端 socket 开启服务器 停止服务器 关闭服务器 注册 登陆 文字传送 上线提示 传送文件 沈阳师范大学学士学位论文 19 图 4 3 系统功能结构图 多用户实时工作如下图所示 本系统的编译环境 及编写平台为 java 主要用到的类为 包中的 Socket 类 编写了多个图形界面 包括服务器界面 客户端聊天界面 登录界面 注册界面 音乐播放器界面等 以服务器所在的主机的磅为 127 0 0 1 所侦听的端口号为 8000 分别先后启动服务器和客户 端应用程序 客户端用户填入登录信息 当服务器收到客户端的登录请求后 若验证登录信息正确 则向客户端发送一个反馈一个登录成功的消息 客户端和服务器通过套接字建立了联系 建立连接 后双方就可以相互通信 客户端在自己的文本框输入要发送的信息点击发送后 发送的信息就会显 示在服务器和目的客户端的文本域中 同样服务器也可以在自己的文本框输入系统信息 点击发送 信息按钮后 发送的信息就会显示在服务器和客户端的文本域中 如若要发送文本文件 在客户端 界面点击 浏览 显示一个打开对话框 在上面选则你要发送的文本 txt 点击发送 服务器再 沈阳师范大学学士学位论文 20 将文档发给目的用户 将在目的用户的聊天记录文本框中显示整个文档的内容 第五章系统详细设计与实现 5 1 服务器服务器 服务器界面左边是状态面板 包括服务器当前的状态 在线人数 最多在线人数 一个端口默认的最多访问量 服务器的IP 这里我设计的是一个回路测试 只是为 了测试的方便 不影响它的网络功能 以及服务器的端口号 由服务器指定 接下了 的文本框是用户日志用于显示用户的登录 注册 退出的时间等一系列的信息 日志 可以保存 这也是服务器应该有的最基本的功能 中间是在线用户列表 在上面显示 了当前所有的在线用户 列表可滚动 方便查看 最右边是聊天消息总汇 用于显示 所有用户的对话记录 当文本域中的内容大于文本域的长和宽的时候 文本域自动出 现水平滚动条或垂直滚动条 拖动它们来查看所有的内容 主要功能是能监察聊天内 容的合法性 如果聊天内容非法服务器可以向用户发出警告的系统信息 下面为一个 文本框 主要是用于服务器向客户端发送信息 既可是中文 也可是字母 最下一排是 控制按钮 发送信息 点击后将文本框中的内容发送给客户端 同时清空文本框中的 内容 并且在服务器端的文本域显示 系统消息 关闭服务器 点击后关闭服务器 图 5 1 服务器界面 沈阳师范大学学士学位论文 21 实现代码 部分 ServerSocket serverSocket 服务器套接字 static Vector u new Vector 1 1 初始聊天用户对象集 static Vector v new Vector 1 1 初始聊天信息对象集 public void run Try 无限循环实现多线程 实现与多个用户的同时连接 while true 监听并接受客户的请求 Socket client serverSocket accept 继承Thread 支持多线程 new Connection client u v catch IOException e fail e 不能监听 5 2 登录登录 这里将服务器的 IP 设置为默认的 127 0 0 1 回路测试 不可编辑 所以这一项可 以跳过不填 用户名和密码输入为注册成功的用户 单击登录按钮进入聊天室 如果 用户名和密码错误可以弹出相应的对话框 单击注册按钮进入注册界面 这个操作一 般提供给新用户 沈阳师范大学学士学位论文 22 图 5 2 登陆界面 实现代码 部分 try 连接到服务器 Socket toServer toServer new Socket strServerIp 1001 写客户详细资料到服务器socket ObjectOutputStream streamToServer new ObjectOutputStream toServer getOutputStream streamToServer writeObject Customer data 读来自服务器socket的登录状态 BufferedReader fromServer new BufferedReader new InputStreamReader toServer getInputStream String status fromServer readLine 5 3 注册注册 注册界面为新用户提供了注册信息输入的界面 界面如下 用户名没有限制 中 文 英文符号都可以 密码只要保证两次输入的一致 性别默认为 男 可以通过单 选框进行选择 年龄必须是 0 100 之间的数字 在这个范围之外为非法 电子邮箱只 提供的对 检查 输入的电子邮件中必须有且只有一个 否则为非法 系统 提供了头像选择的功能 可以选择自己喜欢的头像 沈阳师范大学学士学位论文 23 图 5 3 注册界面 实现代码 部分 public void register 接受客户的详细资料 Register Customer data new Register Customer data custName txtUserName getText data custPassword pwdUserPassword getText data age txtAge getText data sex rbtnMale isSelected 男 女 data email txtEmail getText data picture String valueOf cmbpicture getSelectedItem 验证用户名是否为空 if data custName length 0 JOptionPane showMessageDialog null 用户名不能为空 return 验证密码是否为空 if data custPassword length 0 JOptionPane showMessageDialog null 密码不能为空 return 验证密码的一致性 if data custPassword equals pwdConfirmPass getText JOptionPane showMessageDialog null 密码两次输入不一致 请重新输入 沈阳师范大学学士学位论文 24 return 5 4 客户端主聊天界面客户端主聊天界面 客户端聊天用户端界面如下 最上面的菜单栏提供了 系统 和 帮助 两个子菜单 系统 包括 清除屏幕 保存聊天纪录 退出系统 等项目 帮助 提供了聊天室的介 绍信息 最左边是用户列表 显示了聊天室的在线用户列表 在线用户列表下边的标 签可以显示在线人数 极大的方便了用户 右边的大的文本框显示出聊天纪录 用户 可以在这看到其他成员发给自己的聊天信息 也是聊天室的关键部分之一 下边的单行文本框输入用户预发送的内容 这时你可以通过双击在线用户列表框选择 聊天的对象 再通过单击单选框 私聊 公聊 群聊 选择聊天的方式 上述步骤都 完成后就单击发送按钮发送聊天信息 聊天室附加了文件传送的功能 这是对聊天室 单一聊天功能的拓展 在最下边附加功能面板上 还有音乐播放按钮 单击之后将出 现音乐播放器界面 图 5 4 聊天界面 实现代码 部分 沈阳师范大学学士学位论文 25 if isFirstLogin 如果刚登陆 intMessageCounter messobj chat size 屏蔽该用户登陆前的聊天内容 isFirstLogin false for int i intMessageCounter i messobj chat size i if messobj chat elementAt i getClass getName equals Chat 如果接受的内容是聊天记录 Chat temp Chat messobj chat elementAt i String temp message if temp chatUser equals strLoginName if temp chatToUser equals strLoginName temp message 系统提示您 请不要自言自语 n n else if temp whisper 不是悄悄话 temp message 你 对 temp chatToUser 说 n temp chatMessage n n else temp message 你 悄悄对 temp chatToUser 说 n temp chatMessage n n 5 5 服务器音乐播放服务器音乐播放 单击聊天用户端界面中的音乐 会弹出下图所示的播放器界面 单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025山东青岛产权交易所有限公司招聘4人考试笔试模拟试题及答案解析
- 2025陕西榆林市面向2026届高校毕业生招聘中小学教师374人笔试考试参考试题及答案解析
- 安徽省合肥市普通高中六校联盟2025-2026学年高一上学期11月期中考试政治试卷(含答案)
- 股东权益保护在融资过程中的必要性
- 政务秘书信息收集与分析报告
- 客服专员服务质量提升与投诉处理方案
- 在线心理咨询技巧与常见问题解答
- 如何制作一份高质量的商业分析报告
- 外贸人才选拔指南如何通过货代面试找到理想工作
- 教师资格面试指南及问题集锦
- 2025年全国大学生趣味百科知识竞赛题库及答案
- 2025年「金属非金属矿山(露天矿山)安全管理人员」考试题(附答案)
- 农村涝池综合管理办法
- 保育员一日流程图
- 小猫介绍课件
- 《新型冠状病毒肺炎诊治》课件
- 中国共青团团史课件
- 创新型数字化教学资源的制作与实施策略
- 高职教育 大学教育 现代产业学院建设 方案 申报书 申报表 模板 范本
- 《OTDR测量技术》课件介绍
- 2025年度自媒体合伙人合同版:自媒体平台内容合作与分成协议
评论
0/150
提交评论