基于CS模型的Java聊天室_毕业设计.doc_第1页
基于CS模型的Java聊天室_毕业设计.doc_第2页
基于CS模型的Java聊天室_毕业设计.doc_第3页
基于CS模型的Java聊天室_毕业设计.doc_第4页
基于CS模型的Java聊天室_毕业设计.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

巢湖学院毕业设计(论文) 前言使用Java开发网络程序在网络飞速发展的今天已经显得格外重要,与使用其他语言开发网络程序一样,Java的网络开发是相当方便的,通过Socket进行网络信息传输。但与其他语言不同,Java语言天生具备网络开发的优越性,使用Java可以快速开发安全的基于网络的服务和应用程序。在网络飞速发展的今天,各种各样的的交流变的非常重要。人们的交流已经不能局限在小范围内,人们渴望与其他国家或地区的人们进行交流。但由于地域的限制使人们不可能在短时间内得到面对面的交流。于是,人们不得不使用Internet这个可以把全世界所有的人短时间内都联系到一起的新生事物,所以网上聊天室就诞生了。刚开始的聊天室的功能很简单,就是单纯的文字交流。但随着时间的发展和技术的提高,现在的聊天室已经具备强大的功能。例如,传输文件,语音聊天,视频聊天等。使人们不仅仅满足于言语上的交流,还可以分享彼此的珍藏的图片,看到对方的面容。这些新功能都受到了大家的一致好评。随着手机可以上网,手机也可以登录到网上聊天室中,使人们不仅仅局限于坐在电脑前聊天,可以随时随地的上网聊天。第一章 绪论(一)论文背景及课题来源随着网络技术的发展和普及,Internet已经成为人们获取有关信息和相互交流的重要途径之一,越来越多的机构和组织开始利用网络资源传递、发布、收集和管理信息。这对各种类型的网络提供一次很大的挑战与机遇,特别是通过网络进行信息交互的这种活动,更加使网络的经营方式充满了活力和机动性5。基于C/S模型的Java聊天室是应用于网络交流领域的系统,它的主要特点有:1通用性:聊天室系统在各种各样的网络中均可以运行,系统具有较高的可移植性和使用性;2实用性:系统具有良好的人机界面,便于各类使用者操作,提供了人性化的服务;3及时性:通过网络的连接,系统双方的交流可以在短期内进行,相比与传统面对面的交流节省不少时间15。聊天室中聊天内容的及时性和准确性是极其重要的,它主要针对当今社会快节奏生活,人们没有很多时间来等信息。本系统提供的功能便于系统使用双方的信息交流,有效的提高了使用者的使用效率,缩短了使用者的使用时间6。(二)本课题在国内外的发展状况随着网络技术的发展和普及,多数网站纷纷利用自己的网络资源建立聊天室,并为客户提供各种各样便捷的服务。中国的一些龙头网站,如sina,有很多聊天室,供国内外的不同的人们进行不同话题的讨论,不仅将会员发展由国内延伸到国际,更是为提高自身的知名度提供了方便2。聊天室的开放性、信息资源的多样性可为网站发展提供优良的广告宣传和商品推广,这是其他网站活动方式所无法比拟的,聊天室趋向方便化、快捷化是各大网站成长的必然经历的阶段8。(三)应解决的问题及系统开发意义本系统针对聊天室用户的需要,建立了客户端和服务器端。主要解决的问题包括:1服务器端和客户端要实现界面化,并且界面尽量人性化。2服务器端能够正确的启动,并且时刻监视客户端,保持与客户端的连接。3客户端能够快速准确的连接上服务器端,发送的信息经服务器端可以转发给其他客户。4异常处理,对于用户的不正确的操作系统应该有提示。基于C/S的Java聊天室系统它的开发意义在于为人们之间相互交流提供了一个快捷、方便的应用平台。大型网站可以通过聊天室来提高自身的知名度,增加的访问流量。第二章 开发工具及相关技术介绍(一)Java与Socket简介Java语言是Sun公司于1991年创建的一种新的程序设计语言。该语言与C/C+等传统程序设计语言不同,具有突出的平台独立性,高度的可靠性和安全性特点。1999年6月SUN公司重新定义了Java技术的结构,将Java2平台分为三个版本:标准版(J2SE),企业版(J2EE)和微缩版(J2ME)。目前,Java技术除了沿着J2SE,J2EE,J2ME三种技术为主脉络迅速发展外,还密切关注Internet环境下各种新型信息技术的发展,并能够迅速与这些新技术融合,积极支持这些新技术应用的开发1。Socket是Java中需要编写较低层次的网络通信程序(例如Client/Server应用程序)时提供的一种通讯机制。Socket是两个程序进行双向数据传输的网络通信的端点,一般由一个地址加上一个端口号来标识。每个服务程序都在一个众所周知的端口上提供服务,而想使用服务的客户端程序则需要连接该端口。通过Socket的数据是原始字节流信息,通信双方必须根据约定的协议对数据进行处理与解释15。Socket通信机制提供了两种通信方式:有连接方式(TCP)和无连接方式(UDP数据报)。有连接方式中,通信双方在开始时必须进行一次连接过程,建立一条通信链路。通信链路提供了可靠的,全双工的字节流服务。无连接方式中,通信双方不存在一个连接过程,一次网络I/O以一个数据报形式进行,而且每次网络I/O可以和不同主机的不同进程进行。无连接方式开销小于有连接方式,但是所提供的数据传输服务不可靠,不能保证数据报一定到达目的地14。Java的有连接通信采用流式I/O模式。Socket是两个进程间通信链的端点,每个Socket有两个流:一个输入流和一个输出流。只要向Socket的输出流写,一个进程就可以通过网络连接向其他进程发送数据;同样,通过读Socket的输入流,就可以读取传输来的数据9。有连接通信一般要经历以下四个基本步骤:创建Socket,建立连接;打开连接到Socket的输入/输出流;按照一定的协议对Socket进行读/写操作;关闭Socket。第(3)步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同5。(二)JBuilder5介绍JBuilder5是美国Borland公司最新推出的遵循SUN公司J2EE标准的集成开发工具,是目前使用最广泛的Java开发工具之一。JBuilder作为业界领先的Java开发工具,在集成了Tomcat并支持WebLogic的同时,其套装版更是集成了DreamweaverUltraDev,Rational Rose等产品,JBuilder5提供了可视化的集成开发工具,支持开发人员向导极大地简化了开发人员的工作,使开发更为快捷,方便12。JBuilder5是一组全面的高效率工具,使用Java编程语言创建可伸缩的,高性能的和具有不依赖于平台性能的应用程序。由于可伸缩性和基于组件,JBuilder可以开发所有级别的应用工程,从Apple到连接企业级的,分布式的,多层解决方案的网络数据库应用。JBuilder5环境是用纯Java编写。任何Java编写的程序都可以在JBuilder上运行、调试和工作3。(三)C/S模型介绍C/S是Client/Server的缩写,即客户机/服务器技术,也可以称为C/S模型。很显然,C/S技术有以下几个基本特点:1C/S技术一定包含两个部分,一个作为用户接口的前端,另一个作为共享资源接口的后端。前端被称为客户端,后端被称为服务器端。客户进程包含逻辑和提供用户接口,服务进程充当一个管理共享资源的软件引擎,这些共享资源可以是数据库,打印机,调制解调器和处理机等。2前端与后端的任务对计算机资源有完全不同的要求,这些计算机资源包括:处理机速度,内存,磁盘速度,容量,输入输出设备等。3客户机与服务器由于可能基于完全不同的硬件和操作系统,所以它们之间的交流可能完全通过一套标准的已定义的API与RPC。4可伸缩性是C/S系统的一个很重要特性。无论是水平伸缩还是垂直伸缩都有很出色的表现。在这里,水平伸缩(Horizontal scaling)意味着方便地添加和删除客户工作站。垂直伸缩(Vertical scaling)意味着移植到一个更大更快速的服务器或多服务器时,即服务的升级和集群都会比较方便4。C/S软件技术是一种通用的,基于消息的技术。在本论文中,我们这样描述C/S,网络上的一台计算机向网络上的另外一台计算机请求一个进程或数据,如图1所示。响应服务器客户端请求网络图1: C/S技术模型Client/Server 结构的优点是速度快, 缺点是当 Server 进行更新时, Client 也必需更新6。(四)用Java实现Socket模型首先,我们先介绍一下Socket的运行过程。通常在服务器的指定端口被绑定一个Socket,此时服务器只是处于等待状态,监听客户的连接请求。这个过程如图2所示。服务器客户端监听端口连接请求图2: 服务器监听客户的连接请求服务器一旦接收到客户机的连接请求,服务器选择一个新的端口并绑定一个新的Socket与客户端建立的Socket对,这个过程如图3所示。对客户机来说,连接请求被接受,客户端的Socket便被成功创建了,Socket通信便可以开始进行。由于Server端的输出流是服务端的输入流,Server端的输入流是服务器的输出流,反之亦然,所以,Client与Server可以通过读写各自Socket进行交流。下面我们来看看在Java里对Socket的运行过程实现。服务器使用ServerSocket类来处理客户机的连接请求。当客户机连接到服务器所监听的端口时,ServerSocket将分监听端口服务器客户端连接请求端口图3:服务器处理连接请求配一个新的Socket对象。这个新的Socket对象将连接到一些新端口,负责处理与之相对应客户机的通信。然后,服务器继续监听ServerSocket,处理新的客户机连接。13客户机首先创建一个Socket对象,用于和服务器的通信。之后需创建两个对象:DataInputStream和PrintStream,前者用于从Socket的InputStream输入流中读取数据,后者则用于向Socket的OutputStream的写数据11。(五)Java中的线程模型简介线程是程序中的一个执行流。一个执行流是由CPU运行程序代码并操纵程序的数据所形成的。因此,线程被认为是以CPU为主体的行为。在Java中线程的模型就是一个CPU、程序代码和数据的封装体。Java中的线程模型包含三部分。(1)一个虚拟的CPU。(2)该CPU执行的代码。(3)代码所操作的数据。线程模型在Java中是由Java.lang.Thread类进行定义和描述的。程序中的线程都是Thread的实例。因此用户可以通过创建Thread的实例或定义并创建Thread子类的实例建立和控制自己的线程序7。(六)SQL SERVER 2000简介Sql Server 2000 是微软公司推出的新一代关系数据库管理系统,它继承了Sql Server 7.0版本的优点,同时又增加了许多新的功能,具有功能强大、使用方便、可伸缩性强、与相关软件高度集成等特点。一经推出,就受到了专业人士的好评,目前已经成为web数据库系统中较为常用的一个数据库系统。Sql Server 2000可运行在windows 98/NT/2000/XP等多种操作系统下10。Sql Server 2000的重要管理工具:1服务管理器可以通过服务管理器启动、停止、暂停Sql Server 服务器的相关服务。当操作服务器中的数据时,应该首先确保该服务器正常启动了相应的服务13。2企业管理器企业管理器提供了一种图形化界面来操作数据库对象,在该界面中可以进行数据库、表等数据对象的创建、查询、修改、删除等操作,可以完成Sql Server 2000中绝大多数的管理工作。3查询分析器查询分析器是运行、测试用户的Transact-sql 语句、批处理和脚本的场所。Transact-sql(又称为t-sql)是Sql Server 2000在标准的SQL语句上进行了扩充的语言,是交互式的结构化查询语言,能够完成对Sql Server 2000数据库的所有操作。SQL(structured query language,结构化查询语言)起源于IBM的实验室,目前SQL语言已经成为操作和检索关系数据库中数据的标准语言。在ASP中,只要访问数据库,就必然会使用SQL语言。第三章 系统需求分析(一)系统任务描述本系统是采用Java基于C/S开发的聊天室。管理员在经过登录界面进入管理员界面,即系统的服务器端并启动服务器后。此时,如果有用户登录会在服务器端显示登录用户的用户名和当前连接的用户人数,如果有用户聊天,服务器会显示出聊天信息。管理员在管理界面中可以随时关闭服务器。此时,所有的客户端都将失去和服务器端的连接,从而,用户所有的聊天信息发送将不成功。用户只需要在登录界面中输入正确的用户名和密码即可登录聊天室并且连接上服务器。在聊天室中,用户可以和聊天室中所有的用户发送信息,还可以接收所有用户发送的信息,可以查看到当前服务器的状态。如果用户已经登录了聊天室,而服务器还没有启动,则用户是不可以利用聊天室收发信息的。如果在运行过程中,服务器断开则系统会有提示。(二)系统功能分析1系统的功能需求聊天室程序通常需要完成以下一些基本功能:登录聊天室;启动服务器;关闭服务器;用户之间的聊天;退出聊天室。本系统具体功能需求如下:(1)聊天室管理员经登录界面登录到管理界面,即系统的服务器端。用户经登录界面都进入聊天大厅。两类界面根据系统使用者的角色不同,登录界面也有所不同。(2)不论是管理员还是用户都需要在登录界面输入正确的用户名和密码后才可以登录到各自的界面中去。(3)系统的两个主要界面都是为方便管理员和用户操作的。首先,管理员进入到管理界面后可以方便的启动/停止服务器,看到在线用户的信息和聊天信息。用户进入到聊天大厅中可以聊天,查看服务器状态。(4)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。(5)用户的聊天信息录入,重写,发送,接收方便,快捷。(6)服务器状态,聊天信息和在线用户人数及时刷新。(7)显著提高工作效率,减少人力、物力资源的投入。聊天室系统运行稳定、安全性高、性能可靠。2系统数据流图系统的顶级数据流图如图4所示。聊天室系统管理员管理员用户用户启/停服务器发送信息用户信息接收信息图4:系统顶级数据流图管理员的操作经过聊天室系统将反馈给管理员自己和用户。情况1:管理员启动服务器,管理员界面将出现用户连接信息和用户的聊天信息,用户在登录后可以进入到聊天界面中。情况2:管理员停止服务器,管理员界面中所有的用户信息都将不再刷新,而用户所在聊天界面都将有服务器停止的提示。用户的操作经过聊天室系统将反馈给用户(包括自己)和管理员。用户的用户名,聊天信息在管理员界面都可以显示出来。用户的聊天信息可以在自己和其他用户的界面上显示。登录界面用户名,密码核对管理员界面启动/停止服务器查看在线用户人数查看用户聊天信息口令核对口令正确口令错误管理员界面2级数据流图:图5:管理员界面2级数据流图聊天室界面2级数据流图:登录界面用户名,密码核对聊天室界面发送聊天信息接收聊天信息查看连接状态口令错误口令核对口令正确图6: 聊天室界面2级数据流图3系统数据分析在仔细调查聊天室过程的基础上,总结出该系统需要满足以下系统数据的需求:系统管理员资料。包括管理员用户名和管理员密码。用户信息记录用户的资料。包括用户的用户名、登录密码、真实姓名、电话、传真、所属地区。聊天室系统总体E-R图如图7所示:客户管理员客户管理聊天管理图7 聊天室系统总体E-R图聊天室系统管理员属性图如图8所示:管理员管理员密码管理员用户名图8: 管理员属性图聊天室系统客户个人资料属性图如图9所示:客户用户名传真真实姓名电话密码地区图9: 客户个人资料属性图(三)系统可行性分析从技术发面来看,Java语言的优点主要表现在:简单、面向对象、多线程、安全性等方面。 1.简单性 Java与C+语言非常相近,但Java比C+简单,它抛弃了C+中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减少了出错的可能。 2.面向对象 Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。 Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。 Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重继承,即每个类只能从一个类中继承。 Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。 3.多线程 多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。 Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率5。4.安全性用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。从开发环境来看 ,JBuilder5是一组全面高效率工具,使用Java编程语言创建可伸缩的,高性能的和具有不依赖于平台性能的应用程序。JBuilder5新增几个新功能,并对已有的功能进行了改造,包括一个单步产品安装过程,以及自动卸载功能。其他功能还有:对JAVA的支持,WEB应用开发,Enterprise JavaBeans(EJB),JMS和EAR向导,团队开发,编译器的增强功能,工程属性,配置JDK,部署,IDE的增强功能,语言的支持1。从自身能力来看,本人在大学三年级时对Java语言进行过一个学期的系统学习,对Java有一定的了解和掌握。虽然对Java的网络编程不是很熟悉,但是通过到图书馆查阅书籍和网上收集资料,现在对Java网络编程有了一定的了解。第四章 系统设计系统设计是本系统开发的重要阶段,它直接影响到目标系统的质量,是整个开发工作的核心。系统设计阶段的主要任务是:在系统分析提出的逻辑模型的基础上,科学合理地进行物理模型设计。系统设计分为:总体设计和详细设计。总体设计包括子系统的划分和模块设计,详细设计包括各模块的详细描述、输入输出设计等。系统设计遵循的原则是:系统性、适应性、稳健性、经济性。(一)系统总体结构设计本系统是用Java语言基于C/S开发设计的,其核心的Socket技术决定了该系统的安全性和稳定性,从而保证了本系统有较强的使用性。其最重要的功能就是实现了聊天信息的快速性,改变了传统的面对面聊天信息不确定因素多,安全性低的状况。聊天室设计图如图10所示。服务器客户代理客户端线程用户名用户Socket图10: 聊天室设计图 服务器使用多线程,每个线程对应一个客户端,但线程通过客户代理同客户端交流,在客户代理中有两个重要信息:一个是用户名,一个是用户名对应的Socket。客户向服务器请求连接后,客户代理的Socket字段便被实例化,当用户登录后,客户代理的用户名字段被实例化,一个完整的客户代理生成了。对客户端来说用户名是可见的,客户端提供对用户名的操作。对服务器端来说,Socket是可见的,服务器通过用户名操作Socket,进而回应客户端的请求。基于C/S的Java聊天室系统的作用是提供给人们一个平台进行相互交流,在交流的过程中可能出现的情况也是不同的。因此,可将系统分成两大模块:服务器端模块和客户端模块。系统功能模块图如图11所示:基于JAVA实现聊天室服务器端客户端管理员登录服务器管理用户登录聊天室启动,停止服务器当前连接人数用户聊天信息 连接服务器 接收信息 认证用户 连接状态 显示信息 发送信息图11:系统功能模块图1服务器端模块介绍:该模块分为管理员登录和服务器管理两个子模块。首先,管理员登录是指管理员通过输入用户名和密码进入到管理员界面,即系统的服务器端。而服务器管理是指管理员进入到服务器端界面后,对系统的服务器端所做的一些操作,如启动、停止服务器,查看当前用户连接人数,和用户的聊天信息。2、客户端模块介绍:该模块分为用户登录和聊天室两个子模块。首先,用户登录是指用户通过输入用户名和密码进入到聊天室中,并且聊天室自动连接上服务器。聊天室模块是指系统聊天室所具有的基本功能,如发送、接收信息,查看当前和服务器连接状态,显示发送和接收的信息。(二)数据库设计本次数据库开发工具为Microsoft SQL Server 2000,具体设计的表单如下:表1:用户信息表字段名类型大小允许空备注usernamenvarchar20否用户名passwordnvarchar20否密码Truenamenvarchar10是真实姓名countrynvarchar16是所属地区favnvarchar20是传真telnvarchar20是电话表2:管理员信息表字段名类型大小允许空备注usernamenvarchar20否用户名passwordnvarchar20否密码(三)系统功能模块详细设计管理员登录模块流程图如图12所示: 开始输入用户名与密码查询数据库是否有这条记录?进入管理员界面提示用户名或密码错误结束图12:管理员登录模块流程图下面对管理员登录程序流程图做简要叙述。首先,管理员在登录界面中输入管理员用户名和密码,并向系统发送。系统在收到发送信息后查询数据库,如果在数据库中存有相同的信息,则运行管理员界面。如果在数据库中没有相同信息,则系统提示错误,并返回登录界面。服务器管理模块流程图如图13所示:管理员身份验证管理员界面关闭服务器启动服务器查看在线用户人数开始结束提示用户名或密码错误正确错误查看聊天信息图13:服务器管理模块流程图下面对服务器管理程序流程图做简要叙述。首先,管理员通过登录界面进入到管理员界面中。在此界面中可以实现对系统服务器的启动和关闭,查看在线用户人数和用户的聊天信息。用户登录模块流程图如图14所示:开始输入用户名与密码查询数据库是否有这条记录?进入聊天室界面提示用户名或密码错误结束服务器端显示图14: 用户登录模块流程图用户开始结束身份验证聊天室查看连接状态接收信息发送信息提示用户名或密码错误正确错误查看聊天信息下面对用户登录程序流程图做简要叙述。首先,用户在登录界面中输入用户名和密码经过系统验证后进入到聊天室中,同时,如果服务器已经启动,系统自动将聊天室连接上服务器,用户可以使用聊天室,并且在服务器端有用户登录的提示。如果服务器没图15:聊天室模块流程图有启动,则用户可以进入到聊天室,但是使用不了聊天室。聊天室模块流程图如图15所示。可以对聊天室程序流程图做这样的简要叙述:用户在登录界面中输入用户名和密码进入到聊天室中。在此界面中用户可以实现向其他用户发送信息,接收其他用户发送的信息,查看当前和服务器的连接状态。第五章 编码与实现(一)系统主要模块代码1启动、停止服务器class Serverchat extends Threadpublic Serverchat() tryintPort=Integer.parseInt(textPort); InetAddress host=InetAddress.getLocalHost();localhost.setText(host.getHostName()+host.getHostAddress(); ss=new ServerSocket(intPort); ssLive=ss.isBound();display(服务器已启动!); catch(Exception e) display(服务器已关闭!);this.start();public void run()while(true) tryclientSk=ss.accept();if(clientSk!=null) display(clientSk+join in ); catch(IOException e)display(无法监听!);int i=0;do Connect c=new Connect(clientSk);clients.addElement(c);if(checkName(c)activeConnects+; elsetoClient.println(TAKEN);disconnect(c); i+; break;while(iclients.size(); 2客户端连接服务器class Clientchat extends Threadpublic Clientchat()tryloginName=name.getText();intPort=Integer.parseInt(port.getText();ipAdd=new String(ip.getText();sk=new Socket(ipAdd,intPort);fromServer=newBufferedReader(new InputStreamReader(sk.getInputStream();toServer=new PrintStream(sk.getOutputStream();StringBuffer info=new StringBuffer(INFO:);String userInfo=loginName+:;toServer.println(info.append(userInfo);toServer.flush();address=sk.getInetAddress();skLive=sk.isConnected();display(connect successfully!+address.getLocalHost();catch(Exception e)display(connect failed!);this.start();3聊天室发送信息button2.addActionListener(new Java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button2_actionPerformed(e); ); textField2.addKeyListener(new textField2_KeyAdapter(this); panel2.add(label1); panel2.add(textField2); panel2.add(button2);当客户在发送信息文本框中写好信息后,可以有两种发送方式,一种方法是点击发送按钮,另一种方法在键盘上敲击“ENTER”。4服务器转发信息public void run() try while(true) for(int i=0;ichatClients.size();i+) comThread1=(CommunicateThread)chatClients.get(i); msgStack=comTrStack; ClientName=(String)ClientMsg.get(i); for(int j=0;j+string; broadcast(broadcastInfor); msgStack.removeAllElements(); try Thread.sleep(100); catch(InterruptedException ex) catch(Exception e) 首先,服务器端得到每个连接上的客户端信息栈,读取每个连接线程信息栈并把信息发送出去。最后清除已发送的信息。5.服务器显示在线用户人数public void notifyRoom() StringBuffer people=new StringBuffer(PEOPLE); list.removeAll(); String constr=”当前在线人数为+ activeConnects”; connectTxt.setText(constr); for(int i=0;iclients.size();i+) Connect c=(Connect)clients.elementAt(i); list.add(); sendClients(people); (二)系统测试首先,管理员在登录界面中输入用户名和密码进入到服务器端。图16: 管理员登录界面进入到服务器端后启动服务器。这时,系统可以显示出登录的用户人数和用户的聊天信息。图17: 系统服务器端用户可以通过登录界面进入到聊天室,即系统的客户端。图5-3为user2所在的客户端。图18: 系统客户端若在运行过程中有用户退出客户端,则服务器端会有该用户已退出的提示,并且当前在线人数会自动减1,在此为user2退出。图19:有用户退出时的服务器端若在运行中服务器被停止,则服务器端会提示服务器已停止,并且当前在线人数变为0,客户端在连接状态栏中会有连接失败的提示,收发信息将会不成功。图20: 服务器被停止- 44 -图 21: 服务器停止后的客户端结束语本课题是利用Java,基于C/S开发的网上聊天室。在分析、研究聊天室技术的基础上,对系统的组织结构、数据流程、用户需求等内容进行了详细的调查和分析。本课题的完成,综合运用了大学的专业课知识,特别是软件工程、Java等与系统设计有紧密联系的知识,并加强了对实际问题的分析和解决能力,做到理论联系实际。课题中,完成了对用户和系统流程的需求分析的调查,系统的分析和设计,增强了Java网络编程的实际锻炼。在本次的系统设计中,出现了有很多不足和需要改善的地方,这在以后的设计中都需要重点注意并加以改善,如:对代码某些功能和属性认识不清楚,在代码编写过程中,经常会出现因为用错代码,而使系统产生错误。因为对Java Socket技术掌握的不够充分,在系统设计中,有些功能未能实现,如实现用户列表等。这些在聊天室中都是必须具有的功能。在界面设计中,也存在界面设计不够完美,不够人性化,功能不够详尽等问题。通过本次的毕业设计,使我对一个应用系统的开发有了进一步的了解,对软件开发的过程也有了较深的认识。经过三个月的设计和开发,基于C/S的Java聊天室系统基本开发完毕。其功能基本符合系统开发前所撰写的用户需求分析的要求,能够初步完成基于C/S的Java聊天室的相关功能。由于设计时间较短,系统开发经验不足,所以该系统还有许多不尽如人意的地方。但是,这次毕业设计的完成,使我巩固和加深了专业知识并积累了一次软件开发的宝贵经验,这对我以后的工作和学习都有很大的实际意义的帮助。参考文献1飞思科技产品研发中心.Java TCP/IP应用开发详解M.北京:电子工业出版社,20022飞思科技产品研发中心.JBuilder5应用开发详解M.北京:电子工业出版社,20013王选.软件设计方法M.北京:清华大学出版社,19924朱三元,钱乐秋,宿为名.软件工程技术概论M.北京:科学出版社,20025周之英.现代软件工程M.北京:科学出版社,19926郎波.Java语言程序设计M.北京:清华大学出版社,20057耿祥义,张跃平.Java2实用教程M.北京:清华大学出版社,20018徐家福,吕建.软件语言及其实现M.北京:科学出版社,20009尉哲明,李慧哲等.Java技术教程M.北京:清华大学出版社,200210教育部考试中心.计算机等级考试教材-Java语言程序设计M.北京:高等教育出版社,200411Douglas Kramer,The JavaPlatform-A White PaperJ.Silicm Valley:Sun Marosystem Press,1996,02(9):5-612 Harvey M.Deitel,Paul J.Deitel.Java.程序设计教程(原书第3版)M.北京:机械工业出版社,200413James Gosling,Bill Joy,etc.The While-Accept loop (Server side) J.Valley:Sun Microsystem Press,2000,18(3):16-1714Patrick Chan,Rosanna Lee,Douglas Kramer,Java2类库(增补版)M.北京:机械工业出版社,200115Sun Microsystems,inc.Java Programming Language.SilicmJ Valley:Student Guide,2001,04(7):12-14致 谢 词首先感谢我的导师吴其林老师对我的悉心帮助和关怀。从论文的选题到定稿,他都进行了全面、具体、精心的指导,并为我提供了良好的条件。这次毕业设计能够按时、按要求完成,与吴老师的指导与帮助分不开。在与吴老师交流的三个月里,我不仅学到了专业知识,更重要的是学到了严谨的治学态度、认真的工作作风和不断进取的精神。他渊博的学识、缜密的逻辑、敏锐的思维、高尚的师德让我肃然起敬,这些优秀的品质将在以后的生活中一直伴随和激励着我。其次,我要感谢大学四年来向我授过课的老师,他们让我学到了很多宝贵的知识。同时,还要感谢我的同学和朋友,在我毕业设计的过程中,他们给了我很多无私的帮助和支持,使我得到了许多有益的启发。最后,我要再次向指导老师吴其林老师、学校的老师和亲爱的同学表示深深的谢意!作者:曾琬婷2008年5月10号附 录附录A 源程序主要代码import Java.awt.*;import Java.awt.event.*;import Java.io.*;import J.*;public class ChatRoomServer extends Frame implements Runnable Panel panel; ScrollPane sPanel; TextArea textArea; Button button1; /net ServerSocket ServerSock; public final static int DEFAULT_PORT=6666;/默认端口号 Thread chatAcceptThread;/启动接受连接的线程 BroadcastThread broadcastThread;/广播thread; run when Server is listening Java.util.Vector Clients;/记录连接的线程 Java.util.Vector ClientsInfor;/记录连接线程的信息 public static int index=0; public ChatRoomServer() try jbInit(); catch(Exception e) e.printStackTrace(); ServerListen();/服务器开始监听 private void jbInit()/初始化界面 panel=new Panel(); sPanel=new ScrollPane(); textArea=new TextArea(Server information:n); button1=new Button(退出);sPanel.add(textArea); button1.addActionListener(new Java.awt.event.ActionListener()/退出按钮注册 public void actionPerformed(ActionEvent e) button1_actionPerformed(e); ); panel.add(button1);this.addWindowListener(new ChatFrame_WindowAdapter(this);/注册到继承了窗口适配器的类 this.setSize(600,600); this.setLayout(new BorderLayout(); this.add(sPanel,BorderLayout.CENTER); this.add(panel,BorderLayout.SOUTH); this.show();private void button1_actionPerformed(ActionEvent e) exit(); public void processMsg(String str)/ textArea.append(str); private void ServerListen() try ServerSock=new ServerSocket(DEFAULT_PORT); catch(IOException e) processMsg(e.toString(); processMsg(Server failed!n); processMsg(Server listening on port:+DEFAULT_PORT); Clients=new Java.util.Vector(); ClientsInfor=new Java.util.Vector(); chatAcceptThread=new T

温馨提示

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

评论

0/150

提交评论