




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于 JAVA 的聊天系统的设计与实现 摘摘 要要 随着互联网的快速发展 网络聊天工具已经作为一种重要的信息交流工具 受 到越来越多的网民的青睐 目前 出现了很多非常不错的聊天工具 其中应用比较 广泛的有 Netmeeting 腾讯 QQ MSN Messager 等等 该系统开发主要包括一个网 络聊天服务器程序和一个网络聊天客户程序两个方面 前者通过 Socket 套接字建立 服务器 服务器能读取 转发客户端发来信息 并能刷新用户列表 后者通过与服 务器建立连接 来进行客户端与客户端的信息交流 其中用到了局域网通信机制的 原理 通过直接继承 Thread 类来建立多线程 开发中利用了计算机网络编程的基本 理论知识 如 TCP IP 协议 客户端 服务器端模式 Client Server 模式 网络编 程的设计方法等 在网络编程中对信息的读取 发送 是利用流来实现信息的交换 其中介绍了对实现一个系统的信息流的分析 包含了一些基本的软件工程的方法 经过分析这些情况 该局域网聊天工具采用 Eclipse 为基本开发环境和 java 语言进 行编写 首先可在短时间内建立系统应用原型 然后 对初始原型系统进行不断修 正和改进 直到形成可行系统 关键词 局域网 聊天 socket java AbstractAbstract Along with the fast development of Internet the network chating tool has already become one kind of important communication tools and received more and more web cams favor At present many extremely good chating tools have appeared for example Netmeeting QQ MSN Messager and so on This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat The former establishes the server through the Socket the server can read and deliver the information which client side sends and can renovate the users tabulation The latter make a connection with the server carries on communication between the client side and the client side With the LAN correspondence mechanism principle through inheritting the Thread kind to establish the multithreading directly In the development it uses the elementary theory knowledge which the computer network programmes for example TCP IP agreement Client Server pattern network programming design method and so on In the network programming it realizes reading and transmission of the information that is informaton flows realize the information exchange introduce information flow analysis for realizing a system in which containes some basic software engineering methods After analyzes these situations this LAN chating tool takes Eclipse as the basic development environment and compiles in java language first it will establish the system application prototype in a short time then for the initial prototype system it needs constantly revised and improved until a viable system Key words LAN Chat Socket Java 目目 录录 1 绪论 01 1 1 JAVA 的网络功能与编程 01 1 1 1 JAVA 概述 02 1 1 2 JAVA 的特点 04 1 1 3 JAVA 语言在网络上的应用 07 1 2 JavaBeans 技术 08 1 3 IP TCP 协议常识 08 1 4 Socket 的简介 09 2 规划设计 11 2 1 课题来源 11 2 2 需求分析 11 3 系统分析与设计方案 12 3 1 聊天系统的总体设计要点 12 3 2 聊天系统的设计步骤及功能模块划分 12 3 3 功能模块结构图 13 4 系统设计环境与测试 26 4 1 开发环境和工具 26 4 2 硬件环境 26 4 3 聊天系统的测试 26 5 毕业设计总结 28 5 1 毕业设计总结和展望 28 5 2 经验和感想 28 致 谢 30 参考文献 31 内蒙古农业大学学士学位论文 1 1绪论 随着互联网逐步普及 人们的生活和工作也越来越离不开信息网络的支持 而聊天室是人们最常见 最直接的网上交流的方式 本聊天系统以聊天交流为主 为广大用户提供一个借助网络进行人际交往的平台 也是网络与现实最贴近的实用 型网站 本文所介绍的网络聊天系统是基于开放的 JAVA 应用程序开发设计的 其主 要特性是能动态 实时的完成信息的传递 且具有高效的交互性 更有效的处理客 户请求 易于维护和更新 其运行所需环境及其工作流程和各个功能控件的工作原 理将在本文依次介绍 并且文中提供了部分程序源代码 1 1 JAVA 的网络功能与编程 1 1 1 JAVA 概述 美国硅谷有一句行话 每 10 年 15 年有一次轮回 最近的一次轮回就是从 Java 开始 Java 是一个由 Sun 公司开发而成的新一代编程语言 使用它可在各式各样不同 种机器 不同种操作平台的网络环境中开发软件 不论你使用的是哪一种 WWW 浏览 器 哪一种计算机 哪一种操作系统 只要 WWW 浏览器上面注明了 支持 Java 你就可以看到生动的主页 Java 正在逐步成为 Internet 应用的主要开发语言 它 彻底改变了应用软件的开发模式 带来了自 PC 机以来又一次技术革命 为迅速发展 的信息世界增添了新的活力 Sun 的 Java 语言开发小组成立于 1991 年 其目的是开拓消费类电子产品市场 例如 交互式电视 烤面包箱等 Sun 内部人员把这个项目称为 Green 那时 WorldWideWeb 还在图纸上呢 该小组的领导人是 JamesGosling 是一位非常杰出的 程序员 他出生于 1957 年 于 1984 年加盟 SunMicrosystem 公司 之前在一家 IBM 研究机构工作 他是 SunNeWs 窗口系统的总设计师 也是第一个用 C 实现的 EMACS 的文本编辑器 COSMACS 的开发者 在研究开发过程中 Gosling 深刻体会到消费类电子产品和工作站产品在开发哲 学上的差异 消费类电子产品要求可靠性高 费用低 标准化 使用简单 用户并 不关心 CPU 的型号 也不欣赏专用昂贵的 RISC 处理器 他们需要建立在一个标准基 础之上 具有一系列可选的方案 从 8086 到 80586 都可以选取 从 C 开始 为了使整个系统与平台无关 Gosling 首先从改写 C 编译器着手 但是 Gosling 在改写过程中感到仅 C 是无法满足需要的 于是在 1991 年 6 月份开始准备开发一个 新的语言 那么给它起一个什么名字呢 Gosling 回首向窗外望去 看见一棵老橡树 于是建一个目录叫 Oak 这就是 Java 语言的前身 后来发现 Oak 已是 Sun 公司另一 内蒙古农业大学学士学位论文 2 个语言的注册商标 才改名为 Java 即太平洋上一个盛产咖啡的岛屿的名字 Gosling 在开始写 Java 时 并不局限于扩充语言机制本身 更注重于语言所运 行的软硬件环境 他要建立一个系统 这个系统运行于一个巨大的 分布的 异构 的网格环境中 完成各电子设备之间的通信与协同工作 Gosling 在设计中采用了 虚机器码 VirtualMachineCode 方式 即 Java 语言编译后产生的是虚拟机 虚拟 机运行在一个解释器上 每一个操作系统均有一个解释器 这样一来 Java 就成了 平台无关语言 这和 Gosling 设计的 SunNeWs 窗口系统有着相同的技术味道 在 NeWs 中用户界面统一用 Postscript 描述 不同的显示器有不同的 Postscript 解释 器 这样便保证了用户界面的良好的可移植性 PatrickNaughton 也是 Sun 公司的技术骨干 曾经是 OpenWindows 项目的负责人 当 Naughton 加入该小组后 整个工作进展神速 经过 17 个月的奋战 整个系统胜 利完成 它是由一个操作系统 一种语言 Java 一个用户界面 一个新的硬件平 台 三块专用芯片构成的 通常情况下 这样的项目在 Sun 公司要 75 个人干三年 项目完成后 在 Sun 公司内部做了一次展示和鉴定 观众的反应是 在各方面都采 用了崭新的 非常大胆的技术 许多参观者对 Java 留下了非常深刻的印象 特别得 到 Sun 的两位领导人 ScottMcNealy 和 BillJoy 的关注 但 Java 的前途未卜 Java 语言的转折点 到了 1994 年 WWW 已如火如荼地发展起来 Gosling 意识到 WWW 需要一个 中性的浏览器 它不依赖于任何硬件平台和软件平台 它应是一种实时性较高 可 靠安全 有交互功能的浏览器 于是 Gosling 决定用 Java 开发一个新的 Web 浏览器 这项工作由 Naughton 和 JonathanPayne 负责 到 1994 年秋天 完成了 WebRunner 的开发工作 WebRunner 是 HotJava 的前身 这个原型系统展示了 Java 可能带来的广阔市场前景 WebRunner 改名为 HotJava 并于 1995 年 5 月 23 日发表 后 在产业界引起了巨大的轰动 Java 的地位也随之而得到肯定 又经过一年的试 用和改进 Java1 0 版终于在 1996 年年初正式发表 Java 带来的影响 Java 虽出现的时间不长 但已被业界接受 IBM Apple DEC Adobe SiliconGraphics HP Oracle Toshiba Netscap 和 Microsoft 等大公司已经购买了 Java 的许可证 Microsoft 还在其 Web 浏览器 Explorer3 0 版中增加了对 Java 的支持 另外 众多的软件开发商也开发了许多支持 Java 的软件产品 如 Borland 公司的基于 Java 的快速应用程序开发环境 Latte Metrowerks 公司和 NaturalIntelligence 公司分别开发的基于 Machintosh 的 Java 开发工具 Sun 公司 内蒙古农业大学学士学位论文 3 的 Java 开发环境 JavaWorkshop Microsoft 也开发出系列 Java 产品 数据库厂商 如 Illustra Sybase Versant Oracle 都在开发支持 HTML 和 Java 的 CGI CommonGatewayInterface 在以网络为中心的计算时代 不支持 HTML 和 Java 就意味着应用程序的应用范围只能限于同质的环境 Intranet 正在成为企业信息系统最佳的解决方案 它的优点表现在 便宜 易于使用和管理 用户不管使用何种类型的机器和操作系统 界面是统一的 Web 浏 览器 而数据库 Web 页面 应用程序 用 Java 编的 applet 则存在 WWW 服务器上 开发人员只需维护一个软件版本 管理人员省去了为用户安装 升级 培训之苦 用户则只需一个操作系统 一个 Internet 浏览器足矣 我们可以设想未来的计算方式 每个 HomePage 的实质是一个多媒体应用程 序 这些程序用 Java 来开发 Java 应用程序运行在异质的机器 异质的操作系统 之上 甚至于电冰箱 烤面包箱 防盗电子设备之中 用 Internet 把所有的电子设 备连接起来 通过 TCP IP 进行信息的交流 Java 应用程序之间既可以交换消息 也可以交换程序 一个 Java 的小应用程序 applet 或许有一天 我们可以在 Netscape 浏览器里查看电冰箱的温度 向烤面包箱发一个电子邮件 Java 的出现是计算机信息交换的一个重要里程碑 在单机时代 程序进程 之间靠共享存储进行变量交换 在网络时代 运行在不同宿主机上的程序按网络协 议进行无格式的消息 二进制字符流 交换 消息的语义由交换程序双方维护 在 Java 时代 运行在网络上的程序进程交换的是小应用程序 applet 小应用程序 是什么 它是一个对象 由一组属性和方法构成 是一个可执行的实体 不仅有数据 的状态 而且有定义在数据上的操作 未来可能进行代表 Agent 交换 代理有一 定的智能性 那便是信息交换的更高级阶段 随着 Internet 的崛起 Java 的诞生 巨型的 臃肿的应用软件开始向小型 化发展 由众多 生活 在 Internet 上的小应用程序 applet 相互协作完成信息 的处理与传递 Java 会加速应用软件的小型化 网络化的趋势 随着 Internet 的 发展 软件必然是面向 大众 而不是 少数人 的奢侈品 薄利多销将是网络应 用软件的重要特点 分布式对象技术保证了用多少 下载多少 Java 连同 Internet WWW 正在改变应用软件的开发和使用方式 一切都要围绕着网络 围绕 着平台无关 很多人认为 Word Excel 等传统的信息处理工具都必然走向萎缩 因为它们是单机时代的产物 信息的价值在于使用和共享 Internet 和 Web 是信息 的使用和共享最快捷 最便宜的方式 Word 将演化成为 Web 写作工具 Excel 则将 演化成 Web 上的电子表格 1 1 2 JAVA 的特点 内蒙古农业大学学士学位论文 4 一 JAVA 的主要特点 Java 语言有下面一些特点 简单 面向对象 分布式 解释执行 鲁棒 安全 体系结构中立 可移植 高性能 多线程以及动态性 1 简单性 Java 语言是一种面向对象的语言 它通过提供最基本的方法来完成指定的任务 只需理解一些基本的概念 就可以用它编写出适合于各种情况的应用程序 Java 略 去了运算符重载 多重继承等模糊的概念 且通过实现自动垃圾收集大大简化了程 序设计者的内存管理工作 另外 Java 也适合于在小型机上运行 它的基本解释器 及类的支持只有 40KB 左右 加上标准类库和线程的支持也只有 215KB 左右 库和线 程的支持也只有 215KB 左右 2 面向对象 Java 语言的设计集中于对象及其接口 它提供了简单的类机制以及动态的接口 模型 对象中封装了它的状态变量以及相应的方法 实现了模块化和信息隐藏 而 类则提供了一类对象的原型 并且通过继承机制 子类可以使用父类所提供的方法 实现了代码的复用 3 分布性 Java 是面向网络的语言 通过它提供的类库可以处理 TCP IP 协议 用户可以通 过 URL 地址在网络上很方便地访问其它对象 4 鲁棒性 Java 在编译和运行程序时 都要对可能出现的问题进行检查 以消除错误的产 生 它提供自动垃圾收集来进行内存管理 防止程序员在管理内存时容易产生的错 误 通过集成的面向对象的例外处理机制 在编译时 Java 提示出可能出现但未被 处理的例外 帮助程序员正确地进行选择以防止系统的崩溃 另外 Java 在编译 时还可捕获类型声明中的许多常见错误 防止动态运行时不匹配问题的出现 5 安全性 用于网络 分布环境下的 Java 必须要防止病毒的入侵 Java 不支持指针 一 切对内存的访问都必须通过对象的实例变量来实现 这样就防止程序员使用 特洛 伊 木马等欺骗手段访问对象的私有成员 同时也避免了指针操作中容易 产生的错 误 6 体系结构中立 Java 解释器生成与体系结构无关的字节码指令 只要安装了 Java 运行时系统 Java 程序就可在任意的处理器上运行 这些字节码指令对应于 Java 虚拟 机中的表 示 Java 解释器得到字节码后 对它进行转换 使之能够在不同的平 台运行 7 可移植性 内蒙古农业大学学士学位论文 5 与平台无关的特性使 Java 程序可以方便地被移植到网络上的不同机器 同时 Java 的类库中也实现了与不同平台的接口 使这些类库可以移植 另外 Java 编译 器是由 Java 语言实现的 Java 运行时系统由标准 C 实现 这使得 Java 系统本身也 具有可移植性 8 解释执行 Java 解释器直接对 Java 字节码进行解释执行 字节码本身携带了许多编译时信 息 使得连接过程更加简单 9 高性能 和其它解释执行的语言如 BASIC 不同 Java 字节码的设计使之能很容易地直接 转换成对应于特定 CPU 的机器码 从而得到较高的性能 10 多线程 多线程机制使应用程序能够并行执行 而且同步机制保证了对共享数据的正确 操作 通过使用多线程 程序设计者可以分别用不同的线程完成特定的行为 而不 需要采用全局的事件循环机制 这样就很容易地实现网络上的实时交互行为 11 动态性 Java 的设计使它适合于一个不断发展的环境 在类库中可以自由地加入 新的方 法和实例变量而不会影响用户程序的执行 并且 Java 通过接口来支持多重继承 使 之比严格的类继承具有更灵活的方式和扩展性 二 JavaApplet Java 语言的特性使它可以最大限度地利用网络 Applet 是 Java 的小应 用程序 它 是动态 安全 跨平台的网络应用程序 JavaApplet 嵌入 HTML 语言 通过主页发布 到 Internet 网络用户访问服务器的 Applet 时 这些 Applet 从网络上进行传输 然 后在支持 Java 的浏览器中运行 由于 Java 语言的安全机制 用户一旦载入 Applet 就可以放心地来生成多媒体的用户界面或完成复杂的计算而不必担心病毒的入侵 虽然 Applet 可以和图像 声音 动画等一样从网络上下载 但它并不同于这些多媒 体的文件格式 它可以接收用户的输入 动态 地进行改变 而不仅仅是动画的显示和 声音的播放 三 丰富的类库 Java 提供了大量的类以满足网络化 多线程 面向对象系统 的需要 1 语言包提供的支持包括字符串处理 多线程处理 例外处理 数学函 数处理 等 可以用它简单地实现 Java 程序的运行平台 2 实用程序包提供的支持包括哈希表 堆栈 可变数组 时间和日期等 3 输入输出包用统一的 流 模型来实现所有格式的 I O 包括文件系统 网络 输入 内蒙古农业大学学士学位论文 6 4 低级网络包用于实现 Socket 编程 5 抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件 包括窗 口 菜单 滚动条 对话框等 使得 Java 可以移植到不同平台的机器 6 网络包支持 Internet 的 TCP IP 协议 提供了与 In ternet 的接口 它支持 URL 连接 WWW 的即时访问 并且简化了用户 服务器模型的程序设计 四 Java 和 C C 对于变量声明 参数传递 操作符 流控制等 Java 使用 了和 C C 相同的传统 使得熟悉 C C 的程序员能很方便地进行编程 同时 Java 为 了实现其简单 鲁棒 安全等特性 也摒弃了 C 和 C 中许多不合理的内容 1 全局变量 Java 程序中 不能在所有类之外定义全局变量 只能通过在一个类中定 义公用 静态的变量来实现一个全局变量 例如 ClassGlobalVar public static global var 在类 GlobalVar 中定义变量 global var 为 public static 使得其它类 可以访 问和修改该变量 Java 对全局变量进行了更好的封装 而在 C 和 C 中 依赖于不 加封装 的全局变量常常造成系统的崩溃 2 Goto Java 不支持 C C 中的 goto 语句 而是通过例外处理语句 try Catch final 等来代替 C C 中用 goto 来处理遇到错误时跳转的情况 使程序更可读 且更结构 化 3 指针 指针是 C C 中最灵活 也是最容易产生错误的数据类型 由指针所进行 的内 存地址操作常会造成不可预知的错误 同时通过指针对某个内存地址进行显 式类型 转换后 可以访问一个 C 中的私有成员 从而破坏安全性 造成系统的 崩溃 而 Java 对指针进行完全的控制 程序员不能直接进行任何指针操作 例如 把整数转化 为指针 或者通过指针释放某一内存地址等 同时 数组作为类在 Java 中实现 良好 地解决了数组访问越界这一 C C 中不作检查的错误 4 内存管理 在 C 中 程序员通过库函数 malloc 和 free 来分配和释放内存 C 中则通过 运算符 new 和 delete 来分配和释放内存 再次释放已释放的内存块或 未被分配的 内存块 会造成系统的崩溃 同样 忘记释放不再使用的内存块也 会逐渐耗尽系统资 源 而在 Java 中 所有的数据结构都是对象 通过运算符 new 为它们分配内存堆 通过 new 得到对象的处理权 而实际分配给对象的内存可能 随程序运行而改变 Java 对此自动地进行管理并且进行垃圾收集 有效防止了由 于程序员的误操作而导致的 内蒙古农业大学学士学位论文 7 错误 并且更好地利用了系统资源 5 数据类型的支持 在 C C 中 对于不同的平台 编译器对于简单数据类型如 int float 等分别分 配不同长度的字节数 例如 int 在 IBMPC 中为 16 位 在 VAX 11 中为 32 位 这导致了 代码的不可移植性 但在 Java 中 对于这些数据类型总是分 配固定长度的位数 如对 int 型 它总占 32 位 这就保证了 Java 的平台无关性 6 类型转换 在 C C 中 可以通过指针进行任意的类型转换 常常带来不安全性 而 Java 中 运 行时系统对对象的处理要进行类型相容性检查 以防止不安全的 转换 7 头文件 C C 中用头文件来声明类的原型以及全局变量 库函数等 在大的系 统中 维 护这些头文件是很困难的 而 Java 不支持头文件 类成员的类型和访 问权限都封装 在一个类中 运行时系统对访问进行控制 防止对私有成员的操作 同时 Java 中用 import 语句来与其它类进行通讯 以便使用它们的方法 8 结构和联合 C C 中的结构和联合中所有成员均为公有 这就带来了安全性问题 Java 中 不包含结构和联合 所有的内容都封装在类中 9 预处理 C C 中用宏定义来实现的代码给程序的可读性带来了困难 在 Java 中不支持 宏 它通过关键字 final 来声明一个常量 以实现宏定义中广泛使 用的常量定义 1 1 3 JAVA 语言在网络上的应用 Java 程序可以获取网络上结点的图象 声音 HTML 文档及文本等资源 并可以 对获得的资源进行处理 例如 Java 程序可以每隔一定时间读取某结点提供的最新数 据 并以图表的形式显示出来 在编程处理上 一般先生成一个 URL 类型的对象 然后用 Java 中相应的方法 method 获取该对象所代表的资源 下面列举一个 Java 从网络上获取图象的的方法以说明 Java Applet 可以直接从网络上结点获取图象并显示出来 Java 提供了如下方 法可以创建对应于其他结点的图象 getImage new URL 字符串 其使用格式可有两种 String url 结点 URL Image image try 内蒙古农业大学学士学位论文 8 image getImage new URL url catch Exception e System out println Can t open the URL 或 URL imgur null Image image try imgur new URL 结点 URL catch MalformedURLException e System out println Can t open the URL image getImage imgur 前一种格式用 new URL url 生成 URL 对象 并直接作为 getImage 的参数 后一种格式先用 new URL url 生成一个 URL 对象 再传给 getImage 两种格式 本质上是一样的 以上仅是 Java 在客户端应用的一些方面 目前 Java 更广泛的应用是在服务器 端 1 2 JavaBeans 技术 什么是 JavaBeans JavaBeans 就是 Java 的可重用组件技术 ASP 通过 COM 来 扩充复杂的功能 如文件上载 发送 email 以及将业务 处理或复杂计算分离出来成 为独立可重复利用的模块 JSP 通过 JavaBeans 实现了同样的功能扩充 JSP 对于在 Web 应用中集成 JavaBeans 组件提供了完善的支持 这种支持不仅能缩短开发时间 可以直接利用经测试和可信任的已有组件 避免了重复开发 也为 JSP 应用带 来了更多的可伸缩性 JavaBeans 组件可以用来执行复杂的计算任务 或负责与数 据库的交互以及数据提取等 在实际的 JSP 开发过程中 读者将会发现 和传统的 ASP 或 PHP 页面相比 JSP 页面将会是非常简洁的 由于 JavaBeans 开发起来简单 又可以利用 Java 语言的强大功能 许多动态页面处理过程实际上被封 装到了 JavaBeans 中 1 3 IP TCP 协议常识 1 IP TCP 协议的特点 内蒙古农业大学学士学位论文 9 TCP IP Transmission Control Protocol Internet Protocol 是传输控制协 议 网际协议的缩写 TCP IP 是当今网络互联的核心协议 TCP IP 协议的体系结构 共有四个层次 即应用层 传输层 网络互联层和网络接口层 IP 协议的作用 第一 它是网络层的协议 提供互联网上数据传输的统一格式 第二 提供不可靠的无连接的服务 第三 定义了互联网上的传输数据的基本单元 提供了供路由选择的信息 没有差错校验和处理的机制 TCP 协议的功能 差错控制 可靠性 面向连接 分段 Segment 端口号 TCP 是传输控制协议 是面向连接的提供了一种可靠的传输服务 它用三次握手和 滑动窗口机制来保证传输的可靠性 及进行流量控制 TCP IP 协议具有以下特点 1 协议标准具有开放性 其独立于特定的计算机硬件及操作系统 可以免费使 用 2 统一分配网络地址 使得每个 TCP IP 设备在网络中都具有唯一的 IP 地址 3 实现了高层协议的标准化 能为用户提供多种可靠的服务 2 TCP IP 协议进行传输数据传输的过程 应用程序为了传输数据会调用 TCP 将数据和对应的参数传给 TCP 将 TCP 数据 包封装在 IP 包内 通过网络送给目的 TCP 接收方 TCP 在接收到数据后通知上层应 用程序 TCP 将保证接收数据的正确性 在实现 TCP 的主机上 TCP 可以被看成是一 个模块 和文件系统区别不大 TCP 也可以调用一些操作系统的功能 TCP 不直接 和网络打交道 控制网络的任务由专门的设备驱动模块完成 TCP 只是调用 IP 接口 向 TCP 提供所有 TCP 需要的服务 3 端口号 有的时候 一个 ip 地址不能完整的标识一台服务器 这是应为一台物理性的计 算机同时运行着多个应用程序 这就需要我们来区别同一台机子上的不同的服务 所以就在传输层和应用层上设置接口 就是 端口 端口实际是一个 16 位长的 地址 他的范围是 0 65535 之间 其中 0 1023 是熟知端口 主要是给提供服务的应用程 序使用 这些端口是所有应用进程都只道的 1024 65535 为一般端口 也称动态 端口 连接端口 用来随时分配要求通信的个客户端应用程序 在数据传输过程中 各种服务器不断的检测分配给他的端口 一边发现要求和他通信的客户端 1 4 Socket 的简介 Socket 简称套接字 用于实现网络上客户和服务器之间的连接 也就是说网络 上两个或两个以上双工方式通信的进程之间总有一个连接 这个连接的端点成为套 接字 套接字是在比较低的层次上通信的 内蒙古农业大学学士学位论文 10 具体的说 一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求 当一个连接请求到达时 客户端和服武器端建立一个通信连接 在连接过程中 客 户端被分配一个本地端口与一个 socket 建立连接 客户端通过写 socket 来通知服 务器 以读 socket 中的信息 类似的服务器也获得一个本地端口 它需要一个新的 端口号来侦听原始端口上的其他连接请求 服务器也通过它的本地端口连接一个 socket 通过读写和客户端通信 Socket 程序的工作过程 1 建立 Socket 连接 在通信开始之前由通信双方确认身份 建立一条专用的 虚拟连接通道 2 数据通信 利用虚拟连接通道传送数据信息进行通道 3 关闭 通信结束时 再将所建的虚拟连接拆除 具体如下 服务器 三次握手 第一次握手 原主机发送一个带有本次连接的序号的请求的一个数据帧 第二次握手 目的主机收到请求后 如果同意连接 则发回一个带有一个本次 连接序号和源端机连接序列号的确认 第三此握手 源端机收到含有两次初始序列号的应答后 在向目的主机发送一 个带有两次连接的序列号的确认 具体过程如下 1 服务器 socket 2 监听 4 接收 5 读 6 写 7 关闭 3 客户端 etsocket 6 写 5 读 7 关闭 内蒙古农业大学学士学位论文 11 ACK 1 第一次握手 主机 A 向 主机 B 发送连接请求 第二次握手 主机 B 收到主机 A 的请求 向主机 A 回发一个确认 同时向主机 A 发送一个连接请 求 第三次握手 主机 A 收 到主机 B 发送的数据包 在向主机 B 发送一个确 认连接 内蒙古农业大学学士学位论文 12 内蒙古农业大学学士学位论文 13 内蒙古农业大学学士学位论文 14 主机 A 主机 B 2 规划设计 2 1 课题来源 根据当前网络的需求 网络聊天越来越受各种网民所青睐 因此开发网络聊天 是相当有必要 而且在网站内增加聊天功能 它不仅可以提高网站的访问量 同时 可以留着访客 更重要的是让访客透过聊天室实时的互相交流 而本人也学习过 JAVA 语言 对网络编程也较有兴趣 为了更好的考验自己对 JAVA 语言的掌握程度 本人就决定以 基于 JAVA 聊天设计与实现 为毕业设计 希望通过这一次的能进一 步提高本人的网络开发编程的能力 2 2 需求分析 聊天系统不外乎两个方面 服务器端和客户端 简单分析一下两个方面所要完 成的任务 对设计这个程序来说 等于完成了一半 首先来看一下服务器端的任务 服务器端应当建立一个 ServerSocket 并且不断进行侦听是否有客户端连 接或者断开连接 包括判断没有响应的连接超时 服务器端应当是一个信息发送中心 所有客户端的信息都传到服务器端 由服务器端根据要求分发信息 以上就是服务器端最主要的两个任务 不难看出 服务器端的任务并不复杂 客户端应该完成的工作包括 与服务器端建立通信通道 向服务器端发送信息 接收来自服务器的信息 相对服务器而言 客户端的任务更加简单 有了以上的简单分析 可以知道 解决上述四个问题 即完成了该聊天系统的核心 3 系统分析与设计方案 SYN 1 SEQ ACK 1 SYN 1 SEQ aaaaaaaaaa 内蒙古农业大学学士学位论文 15 3 1 聊天系统的总体设计要点 聊天系统的设计跟普通网站设计有着许多不同的地方 普通网站设计所考虑的 因素 例如 普通网站需要对布局进入大量美化以及动画设计等等 而聊天室只要 提供满足访客双方直接实时聊天即可 因此 在设计聊天系统的过程中 必须要考 虑好以下几个设计要点 1 实现思想 在 Internet 上的聊天程序一般都是以服务器提供服务端连接响应 使用者通过 客户端程序登录到服务器 就可以与登录在同一服务器上的用户交谈 这是一个面 向连接的通信过程 因此 程序要在 TCP IP 环境下 实现服务器端和客户端两部分 程序 2 服务器端工作流程 服务器端通过 socket 系统调用创建一个 Socket 数组后 即设定了接受连接客 户的最大数目 与指定的本地端口绑定 bind 就可以在端口进行侦听 listen 如果有客户端连接请求 则在数组中选择一个空 Socket 将客户端地址赋给这个 Socket 然后登录成功的客户就可以在服务器上聊天了 3 客户端工作流程 客户端程序相对简单 只需要建立一个 Socket 与服务器端连接 成功后通过这 个 Socket 来发送和接收数据就可以了 3 2 聊天系统的设计步骤及功能模块划分 聊天系统工作原理图 内蒙古农业大学学士学位论文 16 3 3 聊天系统各功能模块 1 服务器程序模块 服务器与客户间通过套接口 Socket TCP 连接 在 java 中使用套接口相当简单 Java API 为处理套接口的通信提供了一个类 Socket 使得编写网络应用 程序相对容易 服务器采用多线程以满足多用户的请求 并通过创建一个 ServerSocket 对象来监听来自客户的连接请求 默认端口为 9527 然后无限循环调 用 accept 方法接受客户程序的连接 服务器线程源码 package qq server import java io IOException import java io ObjectInputStream import java io ObjectOutputStream import Socket import java util import qq dao hibernate IServiceDao import qq entity public class ServerController private User user private Socket s private IServiceDao dao private ObjectInputStream ois private ObjectOutputStream oos private OnlineUser onlineUser public ServerController Socket s super dao ServerMainClass userDao this s s 内蒙古农业大学学士学位论文 17 public void handle throws Exception ois new ObjectInputStream s getInputStream oos new ObjectOutputStream s getOutputStream onlineUser new OnlineUser ois oos while true Request req Request ois readObject ois read RequestType type req getType if type equals RequestType exit exitHandle break else if type equals RequestType login loginHandle req else if type equals RequestType register registerHandle else if type equals RequestType offline offlineHandle break else if type equals RequestType changeInformation changeInformationHandle else if type equals RequestType modifypasswd modifypasswdHandle req else if type equals RequestType sendMessage sendMessageHandle req else if type equals RequestType receiveFile receiveFileHandle req else if type equals RequestType sendFile sendFileHandle req private void modifypasswdHandle Request req Long id Long parseLong req getData id String oldpwd req getData oldpwd 内蒙古农业大学学士学位论文 18 String newpwd req getData newpwd Response res new Response RequestType modifypasswd try dao updatePwd id oldpwd newpwd res setData 1 try oos writeObject res catch IOException e e printStackTrace catch RuntimeException e try oos writeObject res catch IOException e1 e1 printStackTrace private void changeInformationHandle try User user User ois readObject Response res new Response RequestType changeInformation try dao updateUser user res setData 1 修改成功返回值带一个整形值 oos writeObject res oos flush catch RuntimeException e oos writeObject res 失败则返回值不带参数 oos flush e printStackTrace catch IOException e 内蒙古农业大学学士学位论文 19 e printStackTrace catch ClassNotFoundException e e printStackTrace private void exitHandle try s close catch IOException e e printStackTrace 发送文件 private void sendFileHandle Request req try User u User ois readObject catch Exception e e printStackTrace 接受文件 private void receiveFileHandle Request req 发送消息 private void sendMessageHandle Request req Response res new Response RequestType receiveMessage Message message null try message Message ois readObject res setData message 内蒙古农业大学学士学位论文 20 catch IOException e e printStackTrace catch ClassNotFoundException e e printStackTrace User to message getTo if to null sendToAllUser res 如果收信人为null 则发送信息给所有人 else 发送信息给to和他自己 Response res1 new Response RequestType individualTalk res1 setData message ObjectOutputStream o null Setset ServerMainClass userMap keySet Iterator it set iterator while it hasNext User u User it next if u equals to o ServerMainClass userMap get u getOos break try o writeObject res1 o flush catch IOException e e printStackTrace 下线 private void offlineHandle try ServerMainClass userMap remove user 内蒙古农业大学学士学位论文 21 Response res new Response RequestType offline res setData user 把下线用户发送给所有客户端 sendToAllUser res s close catch IOException e e printStackTrace private void registerHandle User user dao addUser try oos writeObject user System out println user getId user getName oos flush catch IOExceptio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 异构电源接口标准化适配难题与设备互联可靠性验证体系构建
- 建筑法规更新对高耐候乳胶漆VOC排放限值的技术迭代倒逼效应
- 工业级吡嗪衍生物生产中溶剂残留对药物稳定性的长期影响评估
- 2025年烹饪工艺类型题库及答案
- 2025年司索指挥考试题及答案
- 中国邮政2025永州市秋招系统维护岗位面试模拟题及答案
- 中国邮政集团2025广安市秋招笔试行测高频题库及答案
- 延安市烟草公司2025秋招会计核算岗位高频笔试题库含答案
- 云浮云城区中烟工业2025秋招网络管理岗位面试模拟题及答案
- 长治市烟草公司2025特色知识题库速记含答案口诀
- 2025年二级建造师实务科目考试模拟题及答案
- 2025年教科版(2024)小学科学二年级上册(全册)教学设计(附目录)
- 阳光体育大课间知识培训课件
- 2025年玉树州公安局面向社会公开招聘警务辅助人员(第二批)考试参考试题及答案解析
- 建筑工程临电监理细则
- 四川省绵阳市涪城区绵阳南山中学2025-2026学年高三上学期开学英语试题(含答案无听力音频有听力原文)
- T/CECS 10348-2023一体化净水设备
- 2025年山西太原供水集团有限公司招聘笔试参考题库含答案解析
- 第一章原核生物的形态、构造和功能
- 污染土壤异位修复现场施工方案
- 电力建设土建工程施工试验及验收标准表式施工
评论
0/150
提交评论