java聊天室系统的设计与实现

java聊天室系统的设计与实现

ID:12789279

大小:324.50 KB

页数:38页

时间:2018-07-19

上传者:xinshengwencai
java聊天室系统的设计与实现_第1页
java聊天室系统的设计与实现_第2页
java聊天室系统的设计与实现_第3页
java聊天室系统的设计与实现_第4页
java聊天室系统的设计与实现_第5页
资源描述:

《java聊天室系统的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

优秀文档,值得珍藏!目录第1章绪论11.1论文背景及课题来源11.2本课题在国内外的发展状况11.3应解决的问题及系统开发意义1第2章开发工具及相关技术介绍32.1Java与Socket简介32.2JBuilder5介绍32.3C/S模型介绍42.4用Java实现Socket模型52.5Java中的线程模型简介62.6SQLSERVER2000简介6第3章系统需求分析83.1系统任务描述83.2系统功能分析83.2.1系统的功能需求83.2.2系统数据流图.93.2.3系统数据分析103.3系统可行性分析11第4章系统设计134.1系统总体结构设计134.2数据库设计144.3系统功能模块详细设计15第5章编码与实现185.1系统主要模块代码185.1.1启动、停止服务器185.1.2客户端连接服务器19优质文档,值得珍藏 优秀文档,值得珍藏!5.1.3聊天室发送信息205.1.4服务器转发信息205.1.5服务器显示在线用户人数215.2系统测试21第6章结论25参考文献26致谢27附录28附录A源程序主要代码28优质文档,值得珍藏 JAVA聊天室系统的设计与实现第1章绪论1.1论文背景及课题来源随着网络技术的发展和普及,Internet已经成为人们获取有关信息和相互交流的重要途径之一,越来越多的机构和组织开始利用网络资源传递、发布、收集和管理信息。这对各种类型的网络提供一次很大的挑战与机遇,特别是通过网络进行信息交互的这种活动,更加使网络的经营方式充满了活力和机动性[5]。基于C/S模型的Java聊天室是应用于网络交流领域的系统,它的主要特点有:1.通用性:聊天室系统在各种各样的网络中均可以运行,系统具有较高的可移植性和使用性;2.实用性:系统具有良好的人机界面,便于各类使用者操作,提供了人性化的服务;3.及时性:通过网络的连接,系统双方的交流可以在短期内进行,相比与传统面对面的交流节省不少时间[15]。聊天室中聊天内容的及时性和准确性是极其重要的,它主要针对当今社会快节奏生活,人们没有很多时间来等信息。本系统提供的功能便于系统使用双方的信息交流,有效的提高了使用者的使用效率,缩短了使用者的使用时间[6]。1.2本课题在国内外的发展状况随着网络技术的发展和普及,多数网站纷纷利用自己的网络资源建立聊天室,并为客户提供各种各样便捷的服务。中国的一些龙头网站,如sina,有很多聊天室,供国内外的不同的人们进行不同话题的讨论,不仅将会员发展由国内延伸到国际,更是为提高自身的知名度提供了方便[2]。聊天室的开放性、信息资源的多样性可为网站发展提供优良的广告宣传和商品推广,这是其他网站活动方式所无法比拟的,聊天室趋向方便化、快捷化是各大网站成长的必然经历的阶段[8]。1.3应解决的问题及系统开发意义本系统针对聊天室用户的需要,建立了客户端和服务器端。主要解决的问题包括:1.服务器端和客户端要实现界面化,并且界面尽量人性化。2.服务器端能够正确的启动,并且时刻监视客户端,保持与客户端的连接。3.客户端能够快速准确的连接上服务器端,发送的信息经服务器端可以转发给其他客户。4.异常处理,对于用户的不正确的操作系统应该有提示。基于C/S的Java聊天室系统它的开发意义在于为人们之间相互交流提供了一个快捷、方便的应用平台。大型网站可以通过聊天室来提高自身的知名度,增加的访问流量。-36- JAVA聊天室系统的设计与实现第2章开发工具及相关技术介绍2.1Java与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]。-36- JAVA聊天室系统的设计与实现2.2JBuilder5介绍JBuilder5是美国Borland公司最新推出的遵循SUN公司J2EE标准的集成开发工具,是目前使用最广泛的Java开发工具之一。JBuilder作为业界领先的Java开发工具,在集成了Tomcat并支持WebLogic的同时,其套装版更是集成了DreamweaverUltraDev,RationalRose等产品,JBuilder5提供了可视化的集成开发工具,支持开发人员向导极大地简化了开发人员的工作,使开发更为快捷,方便[12]。JBuilder5是一组全面的高效率工具,使用Java编程语言创建可伸缩的,高性能的和具有不依赖于平台性能的应用程序。由于可伸缩性和基于组件,JBuilder可以开发所有级别的应用工程,从Apple到连接企业级的,分布式的,多层解决方案的网络数据库应用。JBuilder5环境是用纯Java编写。任何Java编写的程序都可以在JBuilder上运行、调试和工作[3]。2.3C/S模型介绍C/S是Client/Server的缩写,即客户机/服务器技术,也可以称为C/S模型。很显然,C/S技术有以下几个基本特点:1.C/S技术一定包含两个部分,一个作为用户接口的前端,另一个作为共享资源接口的后端。前端被称为客户端,后端被称为服务器端。客户进程包含逻辑和提供用户接口,服务进程充当一个管理共享资源的软件引擎,这些共享资源可以是数据库,打印机,调制解调器和处理机等。2.前端与后端的任务对计算机资源有完全不同的要求,这些计算机资源包括:处理机速度,内存,磁盘速度,容量,输入输出设备等。3.客户机与服务器由于可能基于完全不同的硬件和操作系统,所以它们之间的交流可能完全通过一套标准的已定义的API与RPC。4.可伸缩性是C/S系统的一个很重要特性。无论是水平伸缩还是垂直伸缩都有很出色的表现。在这里,水平伸缩(Horizontalscaling)意味着方便地添加和删除客户工作站。垂直伸缩(Verticalscaling)意味着移植到一个更大更快速的服务器或多服务器时,即服务的升级和集群都会比较方便[4]。C/S软件技术是一种通用的,基于消息的技术。在本论文中,我们这样描述C/S,网络上的一台计算机向网络上的另外一台计算机请求一个进程或数据,如图1所示。-36- JAVA聊天室系统的设计与实现响应服务器客户端请求网络图1C/S技术模型Client/Server结构的优点是速度快,缺点是当Server进行更新时,Client也必需更新[6]。2.4用Java实现Socket模型首先,我们先介绍一下Socket的运行过程。通常在服务器的指定端口被绑定一个Socket,此时服务器只是处于等待状态,监听客户的连接请求。这个过程如图2所示。服务器客户端监听端口连接请求图2服务器监听客户的连接请求服务器一旦接收到客户机的连接请求,服务器选择一个新的端口并绑定一个新的Socket与客户端建立的Socket对,这个过程如图3所示。对客户机来说,连接请求被接受,客户端的Socket便被成功创建了,Socket通信便可以开始进行。由于Server端的输出流是服务端的输入流,Server端的输入流是服务器的输出流,反之亦然,所以,Client与Server可以通过读写各自Socket进行交流。下面我们来看看在Java里对Socket的运行过程实现。服务器使用ServerSocket类来处理客户机的连接请求。当客户机连接到服务器所监听的端口时,ServerSocket将分-36- JAVA聊天室系统的设计与实现监听端口服务器客户端连接请求端口图3服务器处理连接请求配一个新的Socket对象。这个新的Socket对象将连接到一些新端口,负责处理与之相对应客户机的通信。然后,服务器继续监听ServerSocket,处理新的客户机连接。[13]客户机首先创建一个Socket对象,用于和服务器的通信。之后需创建两个对象:DataInputStream和PrintStream,前者用于从Socket的InputStream输入流中读取数据,后者则用于向Socket的OutputStream的写数据[11]。2.5Java中的线程模型简介线程是程序中的一个执行流。一个执行流是由CPU运行程序代码并操纵程序的数据所形成的。因此,线程被认为是以CPU为主体的行为。在Java中线程的模型就是一个CPU、程序代码和数据的封装体。Java中的线程模型包含三部分。(1)一个虚拟的CPU。(2)该CPU执行的代码。(3)代码所操作的数据。线程模型在Java中是由Java.lang.Thread类进行定义和描述的。程序中的线程都是Thread的实例。因此用户可以通过创建Thread的实例或定义并创建Thread子类的实例建立和控制自己的线程序[7]。2.6SQLSERVER2000简介SqlServer2000是微软公司推出的新一代关系数据库管理系统,它继承了SqlServer7.0版本的优点,同时又增加了许多新的功能,具有功能强大、使用方便、可伸缩性强、与相关软件高度集成等特点。一经推出,就受到了专业人士的好评,目前已经成为web-36- JAVA聊天室系统的设计与实现数据库系统中较为常用的一个数据库系统。SqlServer2000可运行在windows98/NT/2000/XP等多种操作系统下[10]。SqlServer2000的重要管理工具:1.服务管理器可以通过服务管理器启动、停止、暂停SqlServer服务器的相关服务。当操作服务器中的数据时,应该首先确保该服务器正常启动了相应的服务[13]。2.企业管理器企业管理器提供了一种图形化界面来操作数据库对象,在该界面中可以进行数据库、表等数据对象的创建、查询、修改、删除等操作,可以完成SqlServer2000中绝大多数的管理工作。3.查询分析器查询分析器是运行、测试用户的Transact-sql语句、批处理和脚本的场所。Transact-sql(又称为t-sql)是SqlServer2000在标准的SQL语句上进行了扩充的语言,是交互式的结构化查询语言,能够完成对SqlServer2000数据库的所有操作。SQL(structuredquerylanguage,结构化查询语言)起源于IBM的实验室,目前SQL语言已经成为操作和检索关系数据库中数据的标准语言。在ASP中,只要访问数据库,就必然会使用SQL语言。第3章系统需求分析3.1系统任务描述本系统是采用Java基于C/S开发的聊天室。管理员在经过登录界面进入管理员界面,即系统的服务器端并启动服务器后。此时,如果有用户登录会在服务器端显示登录用户的用户名和当前连接的用户人数,如果有用户聊天,服务器会显示出聊天信息。管理员在管理界面中可以随时关闭服务器。此时,所有的客户端都将失去和服务器端的连接,从而,用户所有的聊天信息发送将不成功。用户只需要在登录界面中输入正确的用户名和密码即可登录聊天室并且连接上服务器。在聊天室中,用户可以和聊天室中所有的用户发送信息,还可以接收所有用户发送的信息,可以查看到当前服务器的状态。如果用户已经登录了聊天室,而服务器还没有启动,则用户是不可以利用聊天室收发信息的。如果在运行过程中,服务器断开则系统会有提示。3.2系统功能分析3.2.1系统的功能需求聊天室程序通常需要完成以下一些基本功能:登录聊天室;-36- JAVA聊天室系统的设计与实现启动服务器;关闭服务器;用户之间的聊天;退出聊天室。本系统具体功能需求如下:(1)聊天室管理员经登录界面登录到管理界面,即系统的服务器端。用户经登录界面都进入聊天大厅。两类界面根据系统使用者的角色不同,登录界面也有所不同。(2)不论是管理员还是用户都需要在登录界面输入正确的用户名和密码后才可以登录到各自的界面中去。(3)系统的两个主要界面都是为方便管理员和用户操作的。首先,管理员进入到管理界面后可以方便的启动/停止服务器,看到在线用户的信息和聊天信息。用户进入到聊天大厅中可以聊天,查看服务器状态。(4)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。(5)用户的聊天信息录入,重写,发送,接收方便,快捷。(6)服务器状态,聊天信息和在线用户人数及时刷新。(7)显著提高工作效率,减少人力、物力资源的投入。聊天室系统运行稳定、安全性高、性能可靠。3.2.2系统数据流图.系统的顶级数据流图如图4所示。聊天室系统管理员管理员用户用户启/停服务器发送信息用户信息接收信息图4系统顶级数据流图-36- JAVA聊天室系统的设计与实现登录界面用户名,密码核对管理员界面启动/停止服务器查看在线用户人数查看用户聊天信息口令核对口令正确口令错误管理员的操作经过聊天室系统将反馈给管理员自己和用户。情况1:管理员启动服务器,管理员界面将出现用户连接信息和用户的聊天信息,用户在登录后可以进入到聊天界面中。情况2:管理员停止服务器,管理员界面中所有的用户信息都将不再刷新,而用户所在聊天界面都将有服务器停止的提示。用户的操作经过聊天室系统将反馈给用户(包括自己)和管理员。用户的用户名,聊天信息在管理员界面都可以显示出来。用户的聊天信息可以在自己和其他用户的界面上显示。管理员界面二级数据流图:图5管理员界面二级数据流图我们也可以得到聊天室界面的二级数据流图:登录界面用户名,密码核对聊天室界面发送聊天信息接收聊天信息查看连接状态口令错误口令核对口令正确图6聊天室界面二级数据流图3.2.3系统数据分析在仔细调查聊天室过程的基础上,总结出该系统需要满足以下系统数据的需求:系统管理员资料。包括管理员用户名和管理员密码。用户信息记录用户的资料。包括用户的用户名、登录密码、真实姓名、电话、传真、所属地区。聊天室系统总体E-R图如图7所示:-36- JAVA聊天室系统的设计与实现客户管理员客户管理聊天管理图7聊天室系统总体E-R图聊天室系统管理员属性图如图8所示:管理员管理员密码管理员用户名图8管理员属性图聊天室系统客户个人资料属性图如图9所示:客户用户名传真真实姓名电话密码地区图9客户个人资料属性图3.3系统可行性分析从技术发面来看,Java语言的优点主要表现在:简单、面向对象、多线程、安全性等方面。(1)简单性-36- JAVA聊天室系统的设计与实现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应用开发,EnterpriseJavaBeans(EJB),JMS和EAR向导,团队开发,编译器的增强功能,工程属性,配置JDK,部署,IDE的增强功能,语言的支持[1]。从自身能力来看,本人在大学三年级时对Java语言进行过一个学期的系统学习,对Java有一定的了解和掌握。虽然对Java-36- JAVA聊天室系统的设计与实现的网络编程不是很熟悉,但是通过到图书馆查阅书籍和网上收集资料,现在对Java网络编程有了一定的了解。第4章系统设计系统设计是本系统开发的重要阶段,它直接影响到目标系统的质量,是整个开发工作的核心。系统设计阶段的主要任务是:在系统分析提出的逻辑模型的基础上,科学合理地进行物理模型设计。系统设计分为:总体设计和详细设计。总体设计包括子系统的划分和模块设计,详细设计包括各模块的详细描述、输入输出设计等。系统设计遵循的原则是:系统性、适应性、稳健性、经济性。4.1系统总体结构设计本系统是用Java语言基于C/S开发设计的,其核心的Socket技术决定了该系统的安全性和稳定性,从而保证了本系统有较强的使用性。其最重要的功能就是实现了聊天信息的快速性,改变了传统的面对面聊天信息不确定因素多,安全性低的状况。聊天室设计图如图10所示。服务器客户代理客户端线程用户名用户Socket图10聊天室设计图服务器使用多线程,每个线程对应一个客户端,但线程通过客户代理同客户端交流,在客户代理中有两个重要信息:一个是用户名,一个是用户名对应的Socket。客户向服务器请求连接后,客户代理的Socket字段便被实例化,当用户登录后,客户代理的用户名字段被实例化,一个完整的客户代理生成了。对客户端来说用户名是可见的,客户端提供对用户名的操作。对服务器端来说,Socket是可见的,服务器通过用户名操作Socket,进而回应客户端的请求。基于C/S的Java-36- JAVA聊天室系统的设计与实现聊天室系统的作用是提供给人们一个平台进行相互交流,在交流的过程中可能出现的情况也是不同的。因此,可将系统分成两大模块:服务器端模块和客户端模块。系统功能模块图如图11所示:基于JAVA实现聊天室服务器端客户端管理员登录服务器管理用户登录聊天室启动,停止服务器当前连接人数用户聊天信息连接服务器接收信息认证用户连接状态显示信息发送信息图11系统功能模块图1.服务器端模块介绍:该模块分为管理员登录和服务器管理两个子模块。首先,管理员登录是指管理员通过输入用户名和密码进入到管理员界面,即系统的服务器端。而服务器管理是指管理员进入到服务器端界面后,对系统的服务器端所做的一些操作,如启动、停止服务器,查看当前用户连接人数,和用户的聊天信息。2、客户端模块介绍:该模块分为用户登录和聊天室两个子模块。首先,用户登录是指用户通过输入用户名和密码进入到聊天室中,并且聊天室自动连接上服务器。聊天室模块是指系统聊天室所具有的基本功能,如发送、接收信息,查看当前和服务器连接状态,显示发送和接收的信息。4.2数据库设计本次数据库开发工具为MicrosoftSQLServer2000,具体设计的表单如下:表1用户信息表字段名类型大小允许空备注-36- JAVA聊天室系统的设计与实现usernamenvarchar20否用户名passwordnvarchar20否密码Truenamenvarchar10是真实姓名countrynvarchar16是所属地区favnvarchar20是传真telnvarchar20是电话表2管理员信息表字段名类型大小允许空备注usernamenvarchar20否用户名passwordnvarchar20否密码4.3系统功能模块详细设计管理员登录模块流程图如图12所示:开始输入用户名与密码查询数据库是否有这条记录?进入管理员界面提示用户名或密码错误结束图12管理员登录模块流程图下面对管理员登录程序流程图做简要叙述。首先,管理员在登录界面中输入管理员用户名和密码,并向系统发送。系统在收到发送信息后查询数据库,如果在数据库中存有相同的信息,则运行管理员界面。如果在数据库中没有相同信息,则系统提示错误,并返回登录界面。服务器管理模块流程图如图13所示:-36- JAVA聊天室系统的设计与实现管理员身份验证管理员界面关闭服务器启动服务器查看在线用户人数开始结束提示用户名或密码错误正确错误查看聊天信息图13服务器管理模块流程图开始输入用户名与密码查询数据库是否有这条记录?进入聊天室界面提示用户名或密码错误结束服务器端显示图14用户登录模块流程图-36- JAVA聊天室系统的设计与实现下面对服务器管理程序流程图做简要叙述。首先,管理员通过登录界面进入到管理员界面中。在此界面中可以实现对系统服务器的启动和关闭,查看在线用户人数和用户的聊天信息。用户登录模块流程图如图14所示:下面对用户登录程序流程图做简要叙述。首先,用户在登录界面中输入用户名和密码经过系统验证后进入到聊天室中,同时,如果服务器已经启动,系统自动将聊天室连接上服务器,用户可以使用聊天室,并且在服务器端有用户登录的提示。如果服务器没有启动,则用户可以进入到聊天室,但是使用不了聊天室。聊天室模块流程图如图15所示。可以对聊天室程序流程图做这样的简要叙述:用户在登录界面中输入用户名和密码进入到聊天室中。在此界面中用户可以实现向其他用户发送信息,接收其他用户发送的信息,查看当前和服务器的连接状态。用户开始结束身份验证聊天室查看连接状态接收信息发送信息提示用户名或密码错误正确错误查看聊天信息图15聊天室模块流程图-36- JAVA聊天室系统的设计与实现第5章编码与实现5.1系统主要模块代码5.1.1启动、停止服务器classServerchatextendsThread{publicServerchat(){try{intPort=Integer.parseInt(textPort);InetAddresshost=InetAddress.getLocalHost();localhost.setText(host.getHostName()+""+host.getHostAddress());ss=newServerSocket(intPort);ssLive=ss.isBound();display("服务器已启动!");}catch(Exceptione){display("服务器已关闭!");}this.start();}publicvoidrun(){while(true){try{clientSk=ss.accept();if(clientSk!=null){display(clientSk+"joinin");}}catch(IOExceptione){display("无法监听!");}inti=0;do{Connectc=newConnect(clientSk);-36- JAVA聊天室系统的设计与实现clients.addElement(c);if(checkName(c)){activeConnects++;}else{toClient.println("TAKEN");disconnect(c);}i++;break;}while(i"+string;broadcast(broadcastInfor);}msgStack.removeAllElements();}-36- JAVA聊天室系统的设计与实现try{Thread.sleep(100);}catch(InterruptedExceptionex){}}}catch(Exceptione){}}}首先,服务器端得到每个连接上的客户端信息栈,读取每个连接线程信息栈并把信息发送出去。最后清除已发送的信息。5.1.5服务器显示在线用户人数publicvoidnotifyRoom(){StringBufferpeople=newStringBuffer("PEOPLE");list.removeAll();Stringconstr=”当前在线人数为+activeConnects”;connectTxt.setText(constr);for(inti=0;i"+string;broadcast(broadcastInfor);}//cleartheinforStackmsgStack.removeAllElements();//清除以发送的信息}try{Thread.sleep(100);//version2}catch(InterruptedExceptionex){}}}catch(Exceptione){}}}//处理窗口关闭事件的适配器classChatFrame_WindowAdapterextendsJava.awt.event.WindowAdapter{ChatRoomServerchatFrame;publicChatFrame_WindowAdapter(ChatRoomServerchatFrame){this.chatFrame=chatFrame;}publicvoidwindowClosing(WindowEvente){//exitprogramchatFrame.exit();//referencetothemethodexit()inChatRoomServer.}-36- JAVA聊天室系统的设计与实现}importJava.awt.*;importJava.awt.event.*;importJava.io.*;importJava.net.*;publicclassChatRoomClientextendsFrameimplementsRunnable{Panelpanel1,panel2;Buttonbutton1,button2;TextFieldtextField1,textField2;Labellabel1;TextAreatextArea;ScrollPanesPanel;//netPrintWriterout;BufferedReaderin=null;Socketsock;publicfinalstaticintDEFAULT_PORT=6666;//createThreadtoReadinformationfromServerThreadreadThread;booleanisTrue=true;//threadcangoonruning??publicChatRoomClient(){try{jbInit();}catch(Exceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){//mainmethodChatRoomClientc=newChatRoomClient();c.show();}-36- JAVA聊天室系统的设计与实现privatevoidjbInit(){//shouldsetsize,positionandFontofeverycomponentbutton1=newButton("连接");//setFontbutton2=newButton("发送");textField1=newTextField("inputServeraddresshere!");textField2=newTextField("inputMessagehereandsendtoServer");label1=newLabel("消息:");panel1=newPanel();panel2=newPanel();sPanel=newScrollPane();textArea=newTextArea();//panel1//pressbutton1:连接toconnecttheClienttoServerbutton1.addActionListener(newJava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){button1_actionPerformed(e);}});//textField1:forinputtheaddressofServer;beregisteredtoKeyListener.//presskey:EntertoconnecttheClienttoServertextField1.addKeyListener(newtextField1_KeyAdapter(this));//Java.awt.event.KeyAdapter()panel1.add(button1);panel1.add(textField1);//sPanelScrollPanesPanel.add(textArea);//panel2//pressbutton2:发送tosendmessagebutton2.addActionListener(newJava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){button2_actionPerformed(e);}});-36- JAVA聊天室系统的设计与实现//textField2:forinputmessage;beregisteredtoKeyListener.//presskey:EntertosendmessagetextField2.addKeyListener(newtextField2_KeyAdapter(this));panel2.add(label1);panel2.add(textField2);panel2.add(button2);//framethis.addWindowListener(newChatFrame_WindowAdapter(this));//frameisregisteredtoWindowListenerthis.setLayout(newBorderLayout());this.setSize(500,400);this.add(panel1,BorderLayout.NORTH);this.add(sPanel,BorderLayout.CENTER);this.add(panel2,BorderLayout.SOUTH);//this.show()}publicvoidstartConnect(){//开始连接try{sock=newSocket(textField1.getText(),DEFAULT_PORT);if(sock!=null){//connectionsuccessedprocessMsg("Connectsuccessfully!");}in=newBufferedReader(newInputStreamReader(sock.getInputStream()));out=newPrintWriter(sock.getOutputStream());}catch(IOExceptionex){processMsg(ex.toString());processMsg("Connectfailed!");}readThread=newThread(this);readThread.start();}-36- JAVA聊天室系统的设计与实现//publicvoidendConnect(){//closeIOstreampublicvoidsendInformation(){out.println(textField2.getText());out.flush();}privatevoidbutton1_actionPerformed(ActionEvente){//连接按钮startConnect();}privatevoidbutton2_actionPerformed(ActionEvente){//发送按钮sendInformation();}publicvoidstopRun(){//tostoptherunningthreadisTrue=false;}publicvoidprocessMsg(Stringmsg){//客户端处理消息textArea.append(msg);textArea.append(" ");}publicvoidrun(){Stringmsg;isTrue=true;while(isTrue){try{msg=in.readLine();if(msg.equals("Serverexit!")){//ServerexitprocessMsg(msg);stopRun();//终止线程}elseif(msg!=null){processMsg(msg);}-36- JAVA聊天室系统的设计与实现Thread.sleep(1000);}catch(IOExceptione){processMsg(e.toString());}catch(InterruptedExceptionei){processMsg(ei.toString());}}//endConnect();try{//服务器退出关闭连接和相关的"流"sock.close();in.close();out.close();}catch(IOExceptionioe){}}publicvoidexit(){//窗口关闭;如果有连接则关闭连接和相关的"流"try{//send"Clientexit!"toServer!out.println("Clientexit!");out.flush();}catch(Exceptionexc){}//endConnect();try{//closeIOstreamsock.close();in.close();out.close();}catch(IOExceptionioe){}finally{System.exit(0);}}}//文本筐textField1的键击事件适配器-36- JAVA聊天室系统的设计与实现classtextField1_KeyAdapterextendsJava.awt.event.KeyAdapter{ChatRoomClientchatFrame;publictextField1_KeyAdapter(ChatRoomClientchatFrame){this.chatFrame=chatFrame;}publicvoidkeyPressed(KeyEvente){//输入的是enter,开始连接!intj=e.getKeyCode();if(j==e.VK_ENTER){chatFrame.startConnect();}}}//文本筐textField2的键击事件适配器classtextField2_KeyAdapterextendsJava.awt.event.KeyAdapter{ChatRoomClientchatFrame;publictextField2_KeyAdapter(ChatRoomClientchatFrame){this.chatFrame=chatFrame;}publicvoidkeyPressed(KeyEvente){//键击Enter键,发送信息!intj=e.getKeyCode();if(j==e.VK_ENTER){chatFrame.sendInformation();}}}//窗口关闭事件适配器classChatFrame_WindowAdapterextendsJava.awt.event.WindowAdapter{ChatRoomClientchatFrame;publicChatFrame_WindowAdapter(ChatRoomClientchatFrame){this.chatFrame=chatFrame;-36- JAVA聊天室系统的设计与实现}publicvoidwindowClosing(WindowEvente){//exitprogramchatFrame.exit();//referencetothemethodexit()inChatRoomClient.}}-36-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭