




免费预览已结束,剩余20页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
25 1 综综合合实实训训报报告告书书 专专 业 业 计算机应用技术计算机应用技术 班班 级 级 09 级计应 应用 班级计应 应用 班 学学 号 号 200901010012 姓姓 名 名 董晓波 指导教师 指导教师 邓宾 张云鹏 李湘云 实习方向 实习方向 JAVA 程序设计 实习时间 实习时间 2010 年 12 月 6 日 2011 年 1 月 7 日 25 2 填表日期 填表日期 2011 年年 1 月月 5 日日 实习题目基于 TCP SOCKET 的 JAVA 聊天室设计 指导教师评语及成绩 成绩 教师签名 职称 年 月 日 系审查意见 审查成绩 审查人签名 职称 系签章 年 月 日 教务处终审意见 终审成绩 终审人签名 职称 公章 年 月 日 25 3 目目 录录 摘要摘要 4 第一章第一章 开发工具及相关技术介绍开发工具及相关技术介绍 5 1 1 SOCKET简介简介 5 1 2 模型介绍模型介绍 6 1 3 用用 JAVA实现实现 SOCKET模型模型 7 第二章第二章 系统需求分析系统需求分析 8 2 1 系统任务描述系统任务描述 8 2 2 系统功能分析系统功能分析 9 1 系统的功能需求 9 2 系统数据流图 10 3 系统可行性分析 11 第三章第三章 系统设计系统设计 12 3 1 系统总体结构设计系统总体结构设计 13 第四章第四章 编码与实现编码与实现 16 4 1 服务器界面模块设计服务器界面模块设计 16 4 24 2 登录模块设计登录模块设计 18 4 34 3 聊天室模块聊天室模块 20 第五章第五章 开发总结开发总结 24 参考文献参考文献 25 25 4 摘要摘要 本实训项目 是在 Java 语言 程序设计 课程上设置的 是巩固学生所 学理论知识 培养学生动手能力并使理论与实际 相结合的重要实践环节 本实训 的目的和任务 是 通过 设计 网络聊天室应用程序 使学生 深入掌握和 综合应用 JAVA 网络编程 线程 GUI 数 据库等 所学知识 完成软件的分析 设计 调试和总结 提高 学生对 Java 语言的综合应用能力和解决问题的能力 并通 过项目小组的方式 提高学生协作能力和沟通能力 人们日常生活中越来越多地使用聊天室这项应用来为自己的工 作和学习服务 一个操作简单 界面友好 运行稳定的聊天室对于 小型局域网的用户可以起到很好的交流作用 所谓聊天室就是一个 可以让许多用户同时互相通信的网上园地 个人用户可以通过聊天 室将自己融入整个主流社会中 关键字 关键字 Java 语言 网路聊天室 交流 25 5 第一章第一章 开发工具及相关技术介绍开发工具及相关技术介绍 1 1 Socket 简介简介 Socket 是 java 中需一要编写较低层次的网络通信程序 例如 Cljent server 应用程序 时提供的一种通讯机制 Socket 是两个程 序进行双向数据传输的网络通信的端点 一般由一个地址加上一个 端日号来标一识 每个服务程序都在一个众所周知的端口上提供服 务 而想使用服务的客户端程序则需要连接该端口 通过 Socket 的 数据是原始字节流信息 通信双方必须根据约定的协议对数据进行 处理与解释 Socket 通信机制提供了两种通信 方式 有连接方式 TCP 和无 连接方式 UDP 数据报 有连接方式中 通信双方在开始时必须进 行一次连接过程 建立一条通信链路 通信链路提供了可靠的 全 双工的字节流服务 无连接力一式中 通信双方不存在一个连接过 程 一次网络 I O 以一个数据报形式进行 而每次网络 I O 可以和 不同 主机的不同进程进行 无连接方式开销小于有连接方式 但是 所提供的数据传输服务不可靠 不能保证数据报一定到达目的地 JAVA 的有连接通信采用流式 I O 模式 Socket 是两个进程间通 信链的端点 每个 Sockct 有两个流 一个输入流和一个输出流 只 要向 Sockct 的输出流写 一个进程就可以通过网络连接向其他进程 发送数据 同样 通过读 Sockt 的输入流 就可以读取传输来的数据 25 6 有连接通信一般要经历以下四个基本步骤 ii 1 创建 Sockct 建立连接 2 打开连接到 Sockct 的输入 输出流 3 按照一定的一脚议对 Socket 进行读 写操作 4 关闭 Socket 第 3 步是程序员用来调用 Socket 和实现程序功能的关键步骤 其他三步在各种程序中基本相同 1 2 模型介绍模型介绍 C S 是 Client Server 的缩写 即客户机 服务器技术 一也可 以称为 C S 模型 很显然 C S 技术有以下几个基木特点 1 C S 技术一定包含两个部分 一个作为用户接口的前端 另 一个作为共享资源接口的后端 前端被称为客户端 后端被称为服 务器端 客户进程包含逻辑和提供用户接口 服务进程充当一个管 理共享资源的软件引擎 这些共一享资源可以是数据库 打印机 调制解调器和处理机等 2 前端与后端的任务对计算机资源有完全不同的要求 这些计 算机资源包括 处理机速度 内存 磁盘速度 容量 输入输出设备 等 3 客户机与服务器由于可能基于完全不同的硬件和操作系统 所以它们之间的交流川一能完全通过一套标准的已定义的 API 与 25 7 RPC C S 软件技术是一种通用的 基于消息的技术 在这里 网 络上的一台计算机向网络上的另外一台计算机请求一个进程或数据 如下图所示 Client Server 结构的优点是速度快 缺点是 Server 进行更新时 Client 也必需更新 1 3 用用 Java 实现实现 Socket 模型模型 首先 我们先介绍一卜 Sockct 的运行过程 通常在服务器的 指定端口被绑定一个 Sockct 此时服务器只是处于等待状态 监 听客户的连接请求 这个过程如图 2 一 2 所示 服务器一旦接收到客户机的连接请求 服务器选择一个新的端口并 25 8 绑定一个新的 Sockct 与客户端建立的 Sockct 对 这个过程如图 2 一 3 所示 对客户机来说 连接请求被接受 客户端的 Sockct 便被成功创 建了 Sockct 通信便可以开始进行 由于 Sockct 端的输出流是服 务端的输入流 Server 端的输入流是服务器的输出流 反之亦然 所以 Client 和 Server 以通过读写各自 Sockct 进行交流 关于 Java 里 Sockct 的运行过程实现 服务器使用 ServerSockct 类来处理客户机的连接请求 当客户机连接到服务器 所监听的端口时 ServerSockct 将分配一个新的 Socket 对象 这 个新的 Sockct 对象将连接到一些新端口 负责处理与之相对应客户 机的通信 然后 服务器继续监听 ServerSockct 处理新的客户机 连接 客户机首先创建一个 Sockct 对象 用于和服务器的通信 之后 需创建两个对象 DataInputStream 和 PrintStream 前者用于从 Sockct 的 InputStream 输入流中读取数据 后者则用于向 Sockct 的 OutputStream 的写数据 25 9 第二章第二章 系统需求分析系统需求分析 2 1 系统任务描述系统任务描述 本系统是采用 Java 基于 C S 开发的聊天室 管理员在经过登录 界而进入管理员界而 即系统的服务器端并启动服务器后 此时一 如果有用户登录会在 服务器端显示登录用户的用户名和当前连接的用户人数 如果有用 户聊天 服务器会显示出聊天信息 管理员在管理界面中可以随时 关闭服务器 此时 所有的客户端都将失去和服务器端的连接 从 而 用户所有的聊天信息发送将不成功 用户只需要在登录界面中输入正确的用户名和密码即可登录聊 天室并且连接上服务器 在聊天室中 用户可以和聊天室中所有的 用户发送信息 还可以接收所有用户发送的信息 可以查看到当前 服务器的状态 2 2 系统功能分析系统功能分析 1 系统的功能需求系统的功能需求 聊天室程序通常需要完成以下一些基本功能 I 登录聊天室 2 启动服务器 3 关闭服务器 4 用户之间的聊天 25 10 5 退出聊天室 本系统其体功能需求如下 1 聊天室管理员经登录界面登录到管理界而 即系统的服务器端 用户经登录界而 都进入聊天大厅 2 不论是管理员还是用户都需一要在登录界面输入正确的用户名 和密码后才可以登录到各自的界面中去 3 系统的两个主要界面都是为方便管理员和用户操作的 首先 管理员进入到管理界而后可以方便的启动 停止服务器 看到在线用 户的信息和聊人信息 用户进入到聊天大厅中可以聊天 查看服务 器状态 4 一个用户退出聊天室对其他用户不能产生影响 而服务器断开 与客户端的连接则所有的用户都失去与服务器的连接 5 用户的聊天信息录入 重写 发送 接收方便 快捷 6 服务器状态 聊天信息和在线用户人数及时刷新 7 聊天室系统运行稳定 安全性高 性能可靠 2 2 系统数据流图系统数据流图 系统的顶级数据流图如下图所示 25 11 管理员的操作经过聊天室系统将反馈给管理员自己和用户 情况 1 管理员启动服务器 管理员界面将出现用户连接信息和 用户的聊天信息 用户在登录后可以进入到聊天界面中 情况 2 管理员停止服务器 管理员界面中所有的用户信息都将 不再刷新 而用户所在聊天界面都将有服务器停止的提示 用户的操作经过聊天室系统将反馈给用户 包括自己 和管理员 用户的用户名 聊天信息在管理员界面都可以显示出来 用户的聊 天信息可以在自己和其他用户的界面上显示 3 系统可行性分析系统可行性分析 从技术发面来看 Java 语言的优点一要表现在 简 单 面 向对象 多线程 安全性等方面 1 简单性 Java 与 C 语言灰常相近 但 Java 比 C 简单 它抛弃了 C 中的一些不是绝对必要的功能 如头文件 顶处理文件 指针 结构 运算符重载 多重继承以及自动强迫同型 Java 实现了自动 25 12 的垃圾收集 简化了内存管理的一作 这使程序一设计更加简便 同时减少了出错的可能 2 面向对象 Java 提供了简单的类机制和动态的构架模型 对象中封装 了它的状态变量和方法 很好地实现了模块化和信息隐藏 而类则提 供了一类对象的原型 通过继承和重载机制 子类可以使用或重新 定义父类或超类所提供的一方法 从而既实现了代码的复用 又提 供了一种动态的解决方案 3 多线程 多线程使应用程序可以同时进行不同的操作 处理不同的事 件 在多线程机制中 不同的线程处理不同的任务 他们之间互不 干涉 不会由于一处等待影响其他部分 这样容 易实现网络上的实 时交互操作 Java 程序可以有多个执行线程 如可以让一个线程进行复杂 的计算 而让另一个线程与用户进行交互 这样用户可以在不中断 计算线程的前提下与系统进行交互 多线程保证了较高的执行效率 4 安全性 Java 不支持指针 一切对内存的访问都必须通过对象的实 例变量来实现 这样就防止了程序员使用欺骗手段访问对象的私有 成员 同时也避免了指针操作中容易产生的错误 25 13 第三章第三章 系统设计系统设计 系统设计是系统开发的重要阶段 它直接影响到目标系统的质量 是整个开发作的核心 系统设计阶段的主要任务是 在系统分析提 出的逻辑模型的基础上合理地进行物理模型设计 系统设计遵循的原则是 系统性 适应性 稳健性 经济性 3 1 系统总体结构设计系统总体结构设计 本系统是用 Java 语言基于 C S 开发设计的 其核心的 Socket 技术决定了该系统的安全性和稳定性 从而保证了系统有较 强的使用性 其最重要的功能就是实现了聊天信息的快速性 改变 了传统的面对面聊天信息不确定因素多 安全性低的状况 服务器使用多线程 每个线程对应一个客户端 担线程通过客户 代理同客户端交流 在客户代理中有两个重要信息 一个是用户名 一个是用户名对应的 Socket 客户向服务器请求连接后 客户代理 的 Sockct 字段便被实例化 当用户登录后 客户代理的用户名宇段 被实例化 一个完整的客户代理生成了 对客户端来说用户名是可 见的 客户端提供对用户名的操作 对服务器端来说 Sockct 是可见 的 服务器通过用户名操作 Sockct 进而回应客户端的请求 基于 C s 的 Java 聊天室系统的作用是提供给人们一个平台进行 相互交流 在交流的过程中可能出现的情况也是不同的 因此 可 25 14 将系统分成两大模块 服务器端模块和客户端模块 系统功能模块图如下图所示 l 服务器端模块介绍 该模块分为管理员登录和服务器管理两个子模块 首先 管理员 登录是指管理员通过输入用户名和密码进入到管理员界而 即系统 的服务器端 而服务器管理是指管理员进入到服务器端界面后 对 系统的服务器端所做的一终操作 如启动 停止服务器 查看当前 用户连接人数和用户的聊天信息 2 客户端模块介绍 该模块分为用户登录和聊天室两个子模块 一首先 用户登录是指用户通过输入用户名和密码进入到聊人室 中 并且聊人室自动连接上服务器 聊人室模块是指系统聊人室所 其有的基本功能 如发送 接收信息 查看当前和服务器的连接状 态 显示发送和接收的信息 25 15 下面对用户登录程序流程图做简要叙述 首先 用户在登录 界面中输入用户名和密码经过系统验证后进入到聊天室中 同时 如果服务器已经启动 系统自动将聊天室连接上服务器 用户可以 使用聊天室 并且在服务器端有用户登录的提示 如果服务器没有 启动 则用户可以进入到聊天室 但是使用不了聊天室 聊天室模块流程图如图所示 下面对聊天室程序流程图做简要叙述 用户在登录界面中输入用 户名和密码进入到聊人室中 在此界而中用户可以实现向其他用户 发送信息 接收其他用户发送的信息查看当前和服务器的连接状态 25 16 第四章第四章 编码与实现编码与实现 4 1 服务器界面模块设计服务器界面模块设计 图 2 1 服务器 服务器的主要代码如下 public class AppServer extends Thread private ServerSocket serverSocket private ServerFrame sFrame private static Vector userOnline new Vector 1 1 private static Vector v new Vector 1 1 创建服务器 启动服务监听 8888 端口 public AppServer sFrame new ServerFrame try serverSocket new ServerSocket 8888 获取服务器的主机名和 IP 地址 InetAddress address InetAddress getLocalHost sFrame txtServerName setText address getHostName 25 17 sFrame txtIP setText address getHostAddress sFrame txtPort setText 8888 catch IOException e fail e 不能启动服务 sFrame txtStatus setText 已启动 this start 启动线程 退出服务器 public static void fail Exception e String str System out println str e 监听客户的请求 当有用户请求时创建 Connection 线程 public void run try while true 监听并接受客户的请求 Socket client serverSocket accept new Connection sFrame client userOnline v 支持多线程 System out println userLength userLength catch IOException e fail e 不能监听 启动服务器 public static void main String args new AppServer Chat java import java io Serializable public class Chat implements Serializable private static final long serialVersionUID 4058485121419391969L public String chatUser public String chatMessage public String emote public boolean whisper 25 18 4 24 2 登录模块设计登录模块设计 图 2 2 登录界面 登录界面的主要代码如下 daXiaoComboBox addItemListener new ItemListener public void itemStateChanged ItemEvent arg0 freshFont blueSlider setMinimum 0 blueSlider addChangeListener new ChangeListener public void stateChanged ChangeEvent arg0 greenSlider addChangeListener new ChangeListener public void stateChanged ChangeEvent arg0 启动聊天页面信息刷新线程 Thread thread new Thread this thread start frmChat setVisible true frmChat setResizable false protected void freshColor TODO 自动生成方法存根 hanziLabel setForeground new Color blueSlider getValue redSlider getValue greenSlider getValue freshFont SuppressWarnings deprecation public void run int intMessageCounter 0 int intUserTotal 0 boolean isFirstLogin true 判断是否刚登陆 25 19 boolean isFound 判断是否找到用户 Vector user exit new Vector try Socket toServer toServer new Socket strServerIp 8888 for Socket toServer toServer new Socket strServerIp 8888 将信息发往服务器 messobj new Message ObjectOutputStream streamtoserver new ObjectOutputStream toServer getOutputStream streamtoserver writeObject Message messobj 接收来自服务器的信息 ObjectInputStream streamfromserver new ObjectInputStream toServer getInputStream messobj Message streamfromserver readObject String valueOf cmbUser getSelectedItem chatobj whisper chPrivateChat isSelected true false chatobj emote emote getSelectedItem toString 向服务器发送信息 try Socket toServer new Socket strServerIp 8888 ObjectOutputStream outObj new ObjectOutputStream toServer getOutputStream outObj writeObject chatobj txtMessage setText outObj close toServer close catch Exception e sendMessage 结束 private static final long serialVersionUID 8965773902056088264L private JPanel pnlLogin private JButton btnLogin btnRegister btnExit private JLabel lblServer lblUserName lblPassword lblLogo private JTextField txtUserName txtServer private JPasswordField pwdPassword public void login 接受客户的详细资料 Customer data new Customer data custName txtUserName getText 25 20 data custPassword pwdPassword getText try 连接到服务器 Socket toServer toServer new Socket strServerIp 8888 ObjectOutputStream streamToServer new ObjectOutputStream toServer getOutputStream streamToServer writeObject Customer data BufferedReader fromServer new BufferedReader new InputStreamReader toServer getInputStream String status fromServer readLine 4 34 3 聊天室模块聊天室模块 图 2 4 聊天室界面 聊天室的代码 25 21 private Socket netClient private Vector userOnline private Vector userChat private ObjectInputStream fromClient private PrintStream toClient private static Vector vList new Vector private Object obj private ServerFrame sFrame SuppressWarnings unchecked public Connection ServerFrame frame Socket client Vector u Vector c netClient client userOnline u userChat c sFrame frame try fromClient new ObjectInputStream netClient getInputStream 服务器写到客户 toClient new PrintStream netClient getOutputStream catch IOException e try netClient close catch IOException e1 System out println 不能建立流 e1 return this start public void run try obj 是 Object 类的对象 obj Object fromClient readObject if obj getClass getName equals Customer serverLogin if obj getClass getName equals Register Customer serverRegiste if obj getClass getName equals Message serverMessage if obj getClass getName equals Chat serverChat if obj getClass getName equals Exit serverExit catch IOException e System out println e catch ClassNotFoundException e1 System out println 读对象发生错误 e1 finally try netClient close catch IOException e System out println e SuppressWarnings deprecation public void serverLogin try Customer clientMessage2 Customer obj 读文件 25 22 FileInputStream file3 new FileInputStream user txt ObjectInputStream objInput1 new ObjectInputStream file3 vList Vector objInput1 readObject int find 0 查找判断标志 System out println find for int i 0 i vList size i Register Customer reg Register Customer vList elementAt i if reg custName equals clientMessage2 custName find 1 if reg custPassword equals clientMessage2 custPassword toClient println 密码不正确 break else 判断是否已经登录 int login flag 0 for int a 0 a 50 toClient println 登录人数过多 请稍候再试 break if login flag 0 chenmin clientMessage2 custHead reg head getUserHeadByName clientMessage2 custName userOnline addElement clientMessage2 System out println Login clientMessage2 custName clientMessage2 custHead userOnline addElement clientMessage2 custName 将该用户名何在 toClient println 登录成功 Date t new Date System out println 用户 clientMessage2 custName 登录成功 登录时间 t toLocaleString n log 用户 clientMessage2 custName 登录成功 登录时间 t toLocaleString n freshServerUserList break else 25 23 toClient println 该用户已登录 else continue if find 0 toClient println 没有这个用户 请先注册 file3 close objInput1 close fromClient close catch ClassNotFoundException e System out println e catch IOException e System out println e private void freshServerUserList String userList new String 50 Customer cus null for int j 0 j userOnline size j cus Customer userOnline get j userList j cus custName sFrame list setListData userList sFrame txtNumber setText
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2 平行线分线段成比例教学设计初中数学鲁教版五四制2012八年级下册-鲁教版五四制2012
- 新能源企业2025安全生产标准化建设与安全防护技术报告
- 2025年新能源汽车电池回收利用市场前景与挑战报告
- 4. 分子动能和分子势能说课稿高中物理人教版2019选择性必修 第三册-人教版2019
- Unit 6Section A(1a~2d) 说课稿2023-2024学年人教版英语八年级下册
- 2025年中国高纯金属硅行业市场分析及投资价值评估前景预测报告
- 2025年中国高纯度橙皮苷粉末行业市场分析及投资价值评估前景预测报告
- 2025年中国橄榄球器材行业市场分析及投资价值评估前景预测报告
- 实体化妆知识培训班课件
- 2025年中国覆铜板用酚醛树脂行业市场分析及投资价值评估前景预测报告
- 吉林省长春市2025年中考英语真题附真题答案
- 2025年放射学影像学诊断综合考试卷答案及解析
- 软件项目开发团队管理方案
- 教师招聘培训课件
- 2025年智能可穿戴设备生物传感技术在高原病治疗监测中的创新应用报告
- 医院药师培训课件
- 《传感器原理及应用》课件-第8章+光电效应及光电器件
- 2025年燃气生产和供应行业研究报告及未来行业发展趋势预测
- 母婴乙肝传播知识培训课件
- 12醉 翁 亭 记 同步练习 (含答案)2025-2026学年语文统编版九年级上册
- 2024正安县辅警招聘考试真题
评论
0/150
提交评论