1、1南 京 晓 庄 学 院 JAVA 程 序 设 计 课 程 设 计 报 告题 目 : Java 聊天室的设计与实现姓 名 : 戴佳伟学 号 : 14552019班 级 : 14 软件工程 3 班指导教师 : 王峥完成时间 2016.10.7成 绩:信 息 工 程 学 院22016 年 6 月3目录1 引言.11.1 java 聊天室开发背景.11.1 java 聊天室开发的目的和意义 11.2 完成的主要工作12 需求分析和总体设计.22.1 需求分析与设计思路22.1.1 关键技术说明 .22.1.2 需求分析 .22.1.3 java 聊天室设计方案与思路 22.1.4 java 聊天室目
2、录结构说明 22.2 java 聊天室功能结构.243 详细设计.43.1 java 聊天室模块实现.43.1.1 XX 模块实现 44 java聊天室运行结果 55 课程设计总结.6Java 聊天室的设计与实现1 引言1.1 Java 聊天室开发背景 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似 QQ、MSN,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个有简单聊天功能的网络聊天程序;而且通过制作该程序还能更好的学习网络软件编程知识。本程序设计简单可以实现在同一局域网的聊天,程序可以自动扫描已经上线的用户,上线5用户可在同
3、一聊天界面中实现群聊。如果需要与其中的用户进行交谈,则只需双击右侧用户列表,读取对方 IP 地址,便可在下面的输入框内输入信息进行发送,实现一对一私聊功能。1.1 Java 聊天室开发的目的和意义目的:(1)理解进程消息通信的概念,如何实现两个创建进程之间的数据传递。(2)理解进程共享变量的进程通信。(3)熟悉并掌握 java 语言的代码编写(4)熟练使用开发工具 Eclipse(5)实现聊天室的一些基本功能意义:(1)实现局域网中的信息交互,界面尽量人性化且美观,让用户便于接受(2)用户及时获取自己想要的信息、促进交谈(3)异常处理,对于用户错误的操作使用程序会有提示消息 (4) 前期仅实现
4、其基本雏形,后期可扩性很高,可实现统计在线人数,发送图片,界面美 化,用户登 陆注册信息的采集,连接到数据库 etc.(5)后期可便于网站自身的广告宣传与商品推广因所学知识和能力的局限性,仅能完成有限范围内的雏形生成与功能实现,后期的功能实现需要进一步的深入学习才能使本课程设计日益完善。1.2 完成的主要工作(1)需求分析与总体设计、详细设计、代码分析6(2)实现程序所能运行的功能(3)选择 Window 系统,并选择该操作系统中一种进程通信的方式。(4)运用 Eclipse 开发工具和 java 语言实现该应用程序。 72 需求分析和总体设计2.1 需求分析与设计思路 2.1.1 关键技术说
5、明程序开发环境与运行环境介绍:JDK(Java Development kit)是 SUN 公司提供的一套 Java 开发环境,通常称之为它主要包括了一些常用的 JDK 工具、执行时需要的函数库、与 C 连接时所需的文件及一些 Java 应用程序范例等。是一个编写 Java 的 Applet 小程序和应用程序的程序开发环境。JDK 是整个 Java 的核心,包括了Java 运行环境(Java Runtime Envirnment),一些 Java 工具和 Java 的核心类库(Java API)。不论什么 Java 应用服务器实质都是内置了某个版本的 JDK。Java 语言介绍:Java 是一
6、门 面向对象编程语言,不仅吸收了 C+语言的各种优点,还摒弃了 C+里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java 具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、 多线程、动态性等特点。Java 可以编写 桌面应用程序 、 Web 应用程序、分布式系统和嵌入式系统应用程序等。Java 提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法 很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型 通过继承
7、和重载机制 子类可以使用或重新定义父类或超类所提供的一方法 从而既实现了代码的复用 又提供了一种动态的解决方案。 Java 是一种完全面向对象的程序设计语一言 它除了数组、布尔和字符二个基本数据类型外的其它类都是对象 它不再支持全局变量。在 Java 中 如果不创建新类就无法创建程序 Java 程序在运行时必须先创建一个类的实例 然后才能提交运行。 8Java 同样支持继承特性 Java 的类可以从其它类中继承行为 但 Java 只支持类的 单重继承 即每个类只能从一个类中继承。 Java 支持界面 界面允许程序员定义方法但又不立即实现 一个类可以实现多个界面利用界面可以得到多重继承的许多优点
8、而又没有多重继承的问题。 编程工具介绍:Eclipse:一个开放源代码的、基于 Java 的可扩展开发平台Eclipse 语言发展:Eclipse 是著名的跨平台的自由集成开发环境(IDE) 。最初主要用来 Java 语言开发,通过安装不同的插件 Eclipse 可以支持不同的计算机语言,比如 C+和 Python 等开发工具。Eclipse 的本身只是一个框架平台,但是众多插件的支持使得 Eclipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活性。许多软件开发商以 Eclipse 为框架开发自己的 IDE。Eclipse 最初由 OTI 和 IBM 两家公司的 IDE 产品开发组创
9、建,起始于 1999 年 4 月。IBM 提供了最初的 Eclipse 代码基础,包括 Platform、JDT 和 PDE。Eclipse 项目 IBM 发起,围绕着 Eclipse 项目已经发展成为了一个庞大的 Eclipse 联盟,有 150 多家软件公司参与到 Eclipse 项目中,其中包括Borland、 Rational Software、 Red Hat 及 Sybase 等。Eclipse 是一个开放源码项目,它其实是 Visual Age for Java 的替代品,其界面跟先前的 Visual Age for Java 差不多,但由于其开放源码,任何人都可以免费得到,并可
10、以在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括 Oracle在内的许多大公司也纷纷加入了该项目,Eclipse 的目标是成为可进行任何语言开发的 IDE 集成者,使用者只需下载各种语言的插件即可。2.1.1 需求分析9随着网络和 IT 技术的快速发展以及日新月异的更新换代,不断渗透到人们的日常生活。如今Internet 已经成为于人们生活息息相关的一部分,也是人们获取有用信息和促进彼此之间相互交流的便捷重要的途径之一。同时,日益增多的机构和企业组织开始利用网络资源传递、发布、收集和管理信息,这对网络进行信息交互这种活动是一次很大的机遇与挑战,从而使网络的经营方式充满了活力。用户
11、需求主要功能分析:(1)聊天交谈功能:用户获取信息的有效途径(2)当前用户显示功能:用户明确自身的登陆状态(3)文本框显示聊天功能:便于用户浏览信息(4)发送消息框显示功能:存放用户输入想要发送的信息(5)发送按钮功能:鼠标点击发送用户输入消息框的信息(6)用户头像显示功能:个性化用户使用2.1.2 Java 聊天室设计方案与思路1.设计方案:(1)把自身本机的 IP 地址发送给所有正在打开这个聊天室程序的人(2)其他人获取了这个 IP 地址后,会监听这个地址(3) 如果有人发送了消息,所有的人都会接收并查看到(4)设计登录程序,使其显示登录的 ip 地址端口号,以及用户昵称,通过登录按钮可以
12、调用客户端程序,实现聊天功能102设计思路聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点: 在 Internet 上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在 TCP/IP 环境下,实现服务器端和客户端两部分程序。1首先通过继承 JFrame 类构造服务器界面。2设计客户端程序使其能够完成正常的
13、通信功能,并且可以更改背景颜色,设置字体颜色。3设计侦听程序,使其显示登录的 ip 地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。2.1.3 Java 聊天室目录结构说明对系统包结构、文件结构列表说明,如表 2-1、2-2 所示。表 2-1包名 作用java.io 提供了用于系统的输入和输出,通过数据流,序列化和文件系统。java.io.IOException 捕获捕获输入输出异常 提供了可移植的网络 I/O 接口,包括 TCP/IP、UDP、域名解析和Unix 域 .DatagramPacket 储存接收到的数据,使用其中的方法提取传送的内容.InetAddress
14、 封装 IP 地址.UnknownHostException 捕获主机 IP 地址无法确定异常11java.awt 提供了一套与本地图形界面进行交互的接口,建立和设置 Java 的图形用户界面java.awt.event 提供接口和类来解决由 awt 组件引起的各种类型的事件javax.swing 抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,利用 Swing 丰富、灵活的功能和模块化组件来创建优雅的用户界面表 2-2文件名 作用image 存放用户头像图片2.2 Java 聊天室功能结构对系统实现功能进行说明,分析系统功能结构,画出系统功能结构图,如图 2-1
15、所示。总体功能:(1)实现在同一局域网的聊天(2)程序可以自动扫描已经上线的用户(3)需要与其中的用户进行交谈,则只需双击右侧用户列表,输入对方 IP 地址,便可在下面的输入框内输入信息进行发送。(4)添加了用户头像(5)调整了界面窗口(6)Enter 键实现发送消息功能12分段功能:1、服务器端功能描述:启动服务器端。2、客户端功能描述:启动客户端;显示登录昵称:显示系统时间:显示聊天记录:发送信息(实现按回车键发送消息);退出聊天室。功能实现:1、采用套接字实现网络中的数据传输2、尽量使用某个或某些应用层的协议实现系统的部分功能3、系统设计规范合理,操作流程方便简单13详细设计3.1 Ja
16、va 聊天室模块实现3.1.1 聊天功能模块实现一、 实现原理启动该程序时运行如下过程:(1)把自身本机的 IP 地址发送给所有正在打开这个聊天室程序的人(2)其他人获取了这个 IP 地址后,会监听这个地址(3) 如果有人发送了消息,所有的人都会接收并查看到二、 分层结构及调用关系说明(1)从 main()函数入口开始分析,实例化 ChatLineFrame 这个类并执行类 repaint 方法,重绘事件,刷新弹出的窗口的内容(2)在实例化 ChatLineFrame 这个类过程中,首先定义 ChatLineFrame 类继承 JFrame,声明成员变量和框架布局内容,然后构造方法,实例化该类
17、的时候,会自动执行函数内的内容。(3)初始化窗口和其他部分(4)实例化 chatJFrame(5)实例化 ChatJFrame 类,该类实现向外广播消息(6)实例化 ReceiveMessage 类,该类实现监听并接受消息(7)启动 UDPReceive 类、UserBroadcast 的线程。(8)在定义初始化方法中,为按钮增加监听行为,实例化 IPListListener 类与 SendButtonListener类。三、 关键代码分析class ChatJFrame extends JFrame /定义 ChatLineFrame类继承 JFrame14JTextField text1
18、= new JTextField();JTextField text2 = new JTextField();JTextField text3 = new JTextField(“目的主机 IP 地址:“ );JTextArea TAreaMessage = new JTextArea();JButton button = new JButton(“发送“ );DefaultListModel model = new DefaultListModel();ChatJFrame.SendButtonListener listener;ChatJFrame.IPListListener liste
19、ner2;static DatagramSocket socket = null; /消息发送插口static DatagramSocket socketBroadcast = null; /广播发送插口/声明成员变量public static final int UDP_CONNECT = 0;public static final int UDP_EXIT = 1;public static final int UDP_MESSAGE = 2;public static final int UDP_USER_ACK = 6;public static String SEP = “!“; /
20、分隔符public static int UDPport = 3333;/消息 发送端口public static int UDPDesPort = 3333; /消息接收端口public static int BroadcastPort = 5555;/广播端口15public static int BroadcastDesPort = 5555; /接收广播端口public static int DataLength = 8192;/数据报默认长度InetAddress iaSource;/本机 IP 地址String MyIPAddress;/IP 地址字符串/ 如果 IP 地址为空,则
21、执行下面的操作if (this.text2.getText().equals(“)this.TAreaMessage.append(“注意:IP 地址栏为空,请双击用户列表,输入对方 IP!n“);void init()setLayout(null);/ 设置布局方式为 NULLthis.TAreaMessage.setEditable(false);/设置容器 X轴上的起点 和 Y轴上的起点 以及组件的长度和组件的高度this.TAreaMessage.setBounds(10, 70, 300, 200);this.TAreaMessage.setLineWrap(true);JScrol
22、lPane localJScrollPane = new 16JScrollPane(this.TAreaMessage);localJScrollPane.setBounds(10, 70, 300, 200);add(localJScrollPane);public void run()String str1 = ChatJFrame.this.MyIPAddress;/ 获取 IP 地址信息int i = str1.lastIndexOf(.);/ 用分割符.将 IP 区分割开String str2 = String.valueOf(0) + ChatJFrame.SEP + ChatJ
23、Frame.this.MyIPAddress + ChatJFrame.SEP;byte arrayOfByte = str2.getBytes();while (true)try/ 获取目的 IP 地址String str3 = str1.substring(0, i + 1) + String.valueOf(255);/ getAllByName()方法是根据主机名返回其可能的所有InetAddress对象,保存在一个数组中。InetAddress localInetAddress = InetAddress.getByName(str3);17/ 封装要发送的信息DatagramPac
24、ket localDatagramPacket = new DatagramPacket(arrayOfByte, arrayOfByte.length, localInetAddress, ChatJFrame.BroadcastDesPort);/ 发送消息ChatJFrame.socketBroadcast.send(localDatagramPacket);Thread.sleep(2000L);四、 分析总结总结本模块开发工作,遇到问题如何解决、改进设想及心得体会。此聊天室小系统从整体上是实现的,大部分功能都可以应用,但是个人能力有限,还是有一些不足之处,有如下几点:(1)客户端的发
25、送文件功能不完善,本想实现可发送和接收所有文件的功能,但是最终尝试过改进,无法实现,知识简单的文本文档传送功能,而且这也不一定成功。应该是程序不够完善,或是哪里出错(2)客户端的发送表情功能也没有实现,本来的意图是像 QQ那样,实现表情图形发送,更加形象,最终还是无法做到,查找相关资料,也没有这部分的讲解,再有时间有限,我也就打消这个功能,改用简单的文字传输(3)服务器的关闭服务器按钮实现有点问题,刚开始调试的时候可以,第二次调试下面就出现广播用户命令失败的提示,并且不强行停止还不会自己停下来,不知道是什么地方出现了问题,希望老师能给予我提示解答。Java 聊天室运行结果这里可以实现两个人在同
26、一局域网的聊天,程序可以自动扫描上线的用户。如果需要与其中的用户进行交谈,则只需双击用户列表,输入对方 IP,便可在下面的输入框内输入信息进行发送。18在聊天框中输入想要发送的信息,会出现本机发送的信息,以及本机的 IP 地址。194 课程设计总结总结本次工作内容及存在的不足,改进设想。经过一个多星期的努力,我实现了用 JAVA 程序设计语言开发的简单聊天室系统,代码部分参照网上资源,部分用老师以前讲过的知识进行修改,经过细心的调试和排错解决了绝大部分的问题。但计算机程序总会有一些不足之处,一些无法实现的功能等。我做的这个系统只是简单的一个聊天页面,然后能看到自己主机发送的信息。本聊天系统对于
27、刚刚接触 JAVA 程序设计语言一年的我们来说已经算是比较容易实现的,基于对面向对象程序设计有了初步的概念,同时也设计到类似的编程思想,所以此次设计上手比较容易,而且我还是选择了比较容易的课题。但是我知道我还有很多不足之处,尤其在开始初期,感觉逻辑复杂,难以控制,因此至今还有很多未解决的缺陷。到目前为止,对 JAVA 的学习知识在老师和自己的努力下学了 JAVAEE 的一些基本知识,今后的学习和工作中,还有很多方面等着自己去学。目前本聊天系统还有待完善的功能列表如下:聊天系统发送和接收文件的功能;聊天系统缺乏各种表情选择,屏蔽发言,播放音乐,悄悄话聊天室等功能;20没有详细考虑聊天室管理功能。
28、对于上述的缺陷,本人还会不断对聊天系统进一步的完善它,期望在今后的日子里凭借自己的技术以及跟同学相互交流 JAVA 技术,争取把本聊天室有待完善的部分尽快做出来,并且完成一些更好的作品。源代码: 14552019戴 佳 伟 .rar21参考文献文献写法如下:1. 专著、论文集、毕业论文、报告等序号作者.书名 文献类型标志 .出版地:出版者,出版年.起止页码(任选).(文献类型标志:专著 M;论文集 C;报告 R;其它文献 Z)2. 期刊序号 作者.篇名J .刊名,年,卷(期刊).3. 电子文献序号主要责任者 电子文献题名 文献类型/ 载体类型 电子文献的出版或可获得地址, 发表或更新的期/引用日期(任选)例如:1孟彩霞.计算机软件基础M. 西安:西安电子科技大学出版社 ,2003.1Cay S.Horstmann Gary Cornell.Java 核心技术 卷 I 基础知识M.北京:机械工业出版社,2013.112张光彬 孟红蕊 张永宝Java 课程设计(案例精编)M.北京:清华大学出版社.200722