网络接口编程-Java聊天程序设计_第1页
网络接口编程-Java聊天程序设计_第2页
网络接口编程-Java聊天程序设计_第3页
网络接口编程-Java聊天程序设计_第4页
网络接口编程-Java聊天程序设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指导老师评阅成绩表指导老师评阅成绩表 学习与工作 态度 (30%) 选题的价值与 意义(10%) 文献综 述 (10%) 研究水平与设 计能力(20%) 课程设计说明说(论 文)撰写质量(20%) 学术水平与创 新(10%) 总分 指导老师签名: 年 月 日 课程设计答辩记录及评价表课程设计答辩记录及评价表 学生 讲述情况 教师主要 提问记录 学生回答 问题情况 评价参考标准 评分项目 分 值优良中及格差 评分总分 选题的价值与意义 1098764 文献综述 1098764 研究水平与设计能力 201917151310 课程设计说明书(论 文)撰写质量 201917151310 学术水平与创新 1098764 答辩评分 答辩效果 302825221915 是否同意论文(设计)通过答辩同意 不同意 答辩小组成员签名 答辩小组组长签名: 年 月 日 课程设计成绩评定表课程设计成绩评定表 评分项目评分比例分数 课程设计总 分 成绩汇总 指导老师评分 50% 课程设计成绩评价表 答辩小组评分 50% 成成 都都 信信 息息 工工 程程 学学 院院 课课 程程 设设 计计 题目:网络聊天程序设计与实现题目:网络聊天程序设计与实现 作者姓名:作者姓名: 班班 级级: : 学学 号:号: 指指导导教教师师: : 日日 期:期: 年年 月日月日 作者签名: 网络聊天程序设计与实现网络聊天程序设计与实现 摘要摘要 这次课程设计我选择了做一个聊天程序,虽然很多同学是和我一样选了同 一个题目,也许功能叶相差无几,但这不是最重要的。腾讯 QQ、MSN-Messager 已经成为我们日常生活中和亲朋好友经常联系的很好的工具,作为计算机 专业的学生,我认为对这些身边的实用软件我们应该有更深刻的认识,理解他 是如何工作的,知道各种功能又是如何实现的,所以我选择了这个题目。 设计中我运用了网络编程的基本理论知识,如客户端/服务器端模式 (Client/Server 模式) 、网络编程的设计方法等。在网络编程中通过 Socket 套接字建立连接,服务器能读取、转发客户端发来信息,并能刷新用户列表。 对信息的读取、发送,是利用流来实现信息的交换,能实现汉字的读取与显示, 在服务器端显示其地址和 ip 号,在线人数,当前状态和客户连接与断开信息等。 同时,借鉴 QQ,我也在用户名后面实时显示系统时间,同时通过方法实现用户 断开连接,刷新用户列表,显示聊天内容等等。和其他同学相比,我的这个程 序还有很多可以扩展的功能,比如踢人,私聊等,由于时间紧迫未能实现,所 以只是完成了基本功能。本程序采用 myEclipse 为基本开发环境和 java 语言进 行编写,能实现多个客户之间同时进行聊天。 关键词:关键词: 局域网 聊天 socket java myEclipse 目目 录录 1引言引言.1 1.1课题背景.1 1.2功能要求.1 1.3运行环境.1 1.4功能实现.1 2JAVA 介绍介绍 .1 2.1JAVA 语言背景.1 2.2JAVA语言特点 .2 2.1.1平台无关性2 2.1.2安全性2 2.1.3面向对象2 2.1.4分布式2 2.1.5健壮性2 2.1.6Java 与 C/C+语言3 3总体设计思路总体设计思路.3 3.1程序设计过程.3 3.2功能模块的流程图.5 3.2.1服务器端5 2.1.1客户端6 3.3遇到的麻烦和解决方法.6 4重要源代码摘录重要源代码摘录.7 4.1图形界面实现.7 4.2重要方法的代码.7 5运行结果与测试运行结果与测试.10 5.1服务器端初始界面.10 5.2客户端初始界面.10 5.3服务器端运行结果.11 5.4客户端运行结果.11 结结 论论12 参考文献参考文献12 第 1 页 共 16 页 1 1引言引言 1.11.1 课题背景课题背景 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网 络,由此而产生的聊天工具越来越多,类似 QQ、网络聊天时一类的聊天系统 的发展日新月异,因此产生了制作一个有简单聊天功能的网络聊天程序;而且 通过制作该程序还能更好的学习网络软件编程知识。 本课程适用于信息安全等本科专业。参加本课程设计的学生,应当认真完 成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际 任务的能力。从而,反映出理解和运用本课程知识的水平和能力。 1.21.2 功能要求功能要求 系统的详细设计和程序的算法分析 系统的硬件配置清单 用户使用说明书 源程序代码清单 测试数据和测试过程记录 遇到的问题及解决方法分析 1.31.3 运行环境运行环境 本程序基于 java 和 myeclipse Java Enterprise 开发环境,可以在一般的装有 windows 系统的主机上运行。 1.41.4 功能实现功能实现 系统结构采用 C/S 结构 采用套接字实现网络中的数据传输 尽量使用某个或某些应用层的协议实现系统的部分功能 系统设计规范合理,操作流程方便简单 2 2JAVAJAVA 介绍介绍 2.12.1 JavaJava 语言背景语言背景 Java 是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的 安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。 在 Java 出现以前,Internet 上的信息内容都是一些乏味死板的 HTML 文档。 这对于那些迷恋于 WEB 浏览的人们来说简直不可容忍。他们迫切希望能在 WEB 中看到一些交互式的内容,开发人员也极希望能够在 WEB 上创建一类无 第 2 页 共 16 页 需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保 障。对于用户的这种要求,传统的编程语言显得无能为力,面 SUN 的工程师敏 锐地察觉到了这一点,从 1994 年起,他们开始将 OAK 技术应用于 WEB 上, 并且开发出了 HotJava 的第一个版本。当 SUN 公司 1995 年正式以 Java 这个名 字推出的时候,几乎所有的 WEB 开发人员都想到:噢,这正是我想要的。于 是 Java 成了一颗耀眼的明星,丑小鸭一下了变成了白天鹅。 2.22.2 JavaJava 语言特点语言特点 .1平台无关性平台无关性 平台无关性是指 Java 能运行于不同的平台。Java 引进虚拟机 原理,并运 行于虚拟机,实现不同平台的 Java 接口之间。使用 Java 编写的程序能在世界范 围内共享。Java 的数据类型与 机器无关,Java 虚拟机(Java Virtual Machine) 是建立在硬件和操作系统之上,实现 Java 二进制代码的解释执行功能, 提供 于不同平台的接口的。 .2安全性安全性 Java 的编程类似 C+,学习过 C+的读者将很快掌握 Java 的精髓。Java 舍 弃了 C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配, 这样可以避免病毒通过指针侵入系统。Java 对程序提供了安全管理器,防止程 序的非法访问。 .3面向对象面向对象 Java 吸取了 C+面向对象的概念,将数据封装于类中,利用类的优点,实 现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使 程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力 用在类和接口的设计和应用上。Java 提供了众多的一般对象的类,通过继承即 可使用父类的方法。在 Java 中,类的继承关系是单一的非多重的,一个子类只 有一个父类,子类的父类又有一个父类。Java 提供的 Object 类及其子类的继承 关系如同一棵倒立的树形,根类为 Object 类,Object 类功能强大,经常会使用 到它及其它派生的子类。 .4分布式分布式 Java 建立在扩展 TCP/IP 网络平台上。库函数提供了用 HTTP 和 FTP 协议 传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样 容易。 .5健壮性健壮性 Java 致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开 发早期出现的错误。Java 自己操纵内存减少了内存出错的可能性。Java 还实现 了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发 Java 应用程 序的周期。 第 3 页 共 16 页 .6Java 与与 C/C+语言语言 Java 提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。 C+安全性不好,但 C 和 C+被大家接受,所以 Java 设计成 C+形式,让大家 很容易学习。Java 去掉了 C+语言中的指针运算、结构、typedefs、#define、需 要释放内存等功能,减少了平常出错的 50%,让 Java 的语言功能很精炼。而且, 因为 Java 很小,所以整个解释器只需 215K 的 RAM,并增加了一些很有用的功 能,如自动收集碎片。Java 实现了 C+的基本面象对象技术并有一些增强, (为 了语言简单,删除了一些功能) 。Java 处理数据方式和用对象接口处理对象数据 方式一样。 Java 与 C 和 C+直接相关.Java 继承了 C 的语法,Java 的对象模型是从 C+ 改编而来的.现代程序设计始于 C,而后过渡到 C+,现在则是 JAVA.通过大量的 继承,JAVA 提供了一个强大的,可以更好地利用已有成果的,逻辑一致的程序设计 环境,并且增加了在线环境需求的新功能.或许最重要的一点在于,由于它们的相 似性,C,C+和 JAVA 为专业程序员定义了一个统一的概念架构.程序员从其中的 一种语言转到另一种语言时,不会遇到太大的困难. 3 3总体设计思路总体设计思路 3.13.1 程序设计过程程序设计过程 由网络编程可知,我们要分别建立一个服务器端和客服端,并且通过多线 程实现多用户同时聊天。 我是先向别人学习了一下,基本了解了需要做的工作,一些同学做的聊天 程序课程设计功能强大,界面友好,我也从他们那里学到了很多。 第一步,借鉴别人的界面,我在草稿上画了一个服务器界面,将各个组件 标上,便于写程序时使用,如下图 1: 第二步,大致描绘一个客服端界面,布局好各个组件,不得不说,还可以 添加更多模块实现更多的功能,草图如下图 2: 第三步,开始写界面的代码,通过浏览器查看 applet 界面,不断修改到自 认为可以为止; 第四步,建立客户端线程类,构造监听类的构造器,建立线程运行方法, 读取服务器端传来的各种信息,如聊天信息,服务器关闭等; 第五步,实现客户端线程类,监听服务器传来的信息,存储客户的信息, 接受并读取客户发送到服务器的信息,输出到客户端显示; 第六步,实现线程运行方法,读取客户端发来的数据流,如退出,建立连 接,聊天内容等; 第七步,实现各个方法,如向客户端发送消息的方法、监听连接信息,刷 第 4 页 共 16 页 新客户端用户列表方法、向每个连接的客户端发送信息的方法、关闭所有连接 的方法、断开单个客户的方法等; 草图: 菜单 menu 用户 连接于断开信息显示 jList1 jLabel1 jLabel2 jLabel4 jLabel3 提示信息 backinfo 图一:服务器端草图 Panel1 Label1 name_txt button1 button2 Panel2 Lanel2 Chat_txt 显示聊天信息 Panel3 Label3 List1 在线用户列表 Label4 msg_txt button3 图二: 客服端草图 第 5 页 共 16 页 3.23.2 功能模块的流程图功能模块的流程图 3.2.1 服务器端服务器端 运行 chatserver.java 程序 生成界面 启动服务器 设计服务器界面 使用端口初始化服务器套接字 将客户 socket 信息写入 list 框 启动线程,用 notifyRoom()监听聊天室 刷新客户端信息 检查当前用户连接数 clients.size()50 是 处理产生的 错误异常 否 实例化一个 client 线程类 一个对应一 个客户连接 是否退出? 关闭服务器 是 第 6 页 共 16 页 .1 客户端客户端 设计客户端界面 并初始化 运行 chatapplet.java 连接服务器 生成界面 用户是否请 求连接 是 将客户端线程实例化 启动线程 监听服务器传来的信息 请求断开连接 否 是 运行 disconnect()方法 是 定义并实例化一个字符缓冲存储 信息 用打印流发送信息 线程处理服务器传来的信息 发送聊天消息 3.33.3 遇到的麻烦和解决方法遇到的麻烦和解决方法 开始的时候遇到的最大的麻烦就是不能读入和输出汉字,产生了乱码和问 号; 另外有时会出现用户列表无法更新、服务器端无法显示客户连接和断开 信息,系统动态时间无法获取等等。 对于汉字问题我的解决办法是另外选择了一种读入数据流方法,使用 BufferRead(), 用 readLine()读取; 关于系统的时间我是通过在网上找的一种方法实现的,将其输出到客服端 显示; 有时是关联问题,以及输出显示格式,获取信息一些细节步骤如果出错就 会产生意想不到的错误,无法解决,还越改越乱。所以要养成多多的注释和一 第 7 页 共 16 页 步一步的修改,避免不可恢复,造成重大的损失。 4 4重要源代码摘录重要源代码摘录 4.14.1 图形界面实现图形界面实现 JPanel Panel;/Pane 是 JPanel 类的对象(实例) JMenuBar jMenuBar1 = new JMenuBar(); JMenu jMenuFile = new JMenu(); JMenuItem jMenuFileExit = new JMenuItem(); JMenu jMenuHelp = new JMenu(); JMenuItem jMenuHelpAbout = new JMenuItem(); JLabel statusBar = new JLabel(); BorderLayout borderLayout1 = new BorderLayout(); JPanel jPanel1 = new JPanel(); BorderLayout borderLayout2 = new BorderLayout(); JLabel back = new JLabel(); JPanel jPanel2 = new JPanel(new GridLayout(10, 1); JLabel jLabel1 = new JLabel(); TextField status = new TextField(10); JLabel jLabel2 = new JLabel(); TextField maxnumber = new TextField(10); JLabel jLabel3 = new JLabel(); TextField count = new TextField(15); JLabel jLabel4 = new JLabel(); TextField address = new TextField(15); JLabel jLabel5 = new JLabel(); TextField ip = new TextField(15); static java.awt.List jList1 = new java.awt.List(20); JscrollPane scrollpane=new JScrollPane(jList1,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAY S,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); 4.24.2 重要方法的代码重要方法的代码 实现 sendclients 方法用来向每个连接的客户端发送信息; public static synchronized void sendClients(StringBuffer msg) for(int i=0;i0) Client c=(Client)clients.firstElement(); tryc.socket.close(); catch(IOException e) System.out.println(“Error:“+e); finally clients.removeElement(c); 断开单个客户的方法 ,向其他在线客户发送断开连接信息,synchronized 是 java 中用来维护数据的一致性,通过 synchronized 机制给共享资源上锁,使 所有访问有序进行。 public static synchronized void disconnect(Client c) try jList1.addItem(c.ip+“离开“); c.send(new StringBuffer(“QUIT“); c.socket.close(); catch(IOException e) System.out.println(“Error:“+e); finally 第 9 页 共 16 页 clients.removeElement(c); notifyRoom()用来监视连接信息,不断刷新 clients 数组并刷新客户端用户列 表信息; public static void notifyRoom() StringBuffer people=new StringBuffer(“PEOPLE“); for(int i=0;iclients.size();i+) Client c=(Client)clients.elementAt(i); people.append(“:“+); sendClients(people); 动态获取本机系统的时间,在用户名之后显示; public String getStringDate() Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“); S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论