基于JAVA实现聊天室.docx
《基于JAVA实现聊天室.docx》由会员分享,可在线阅读,更多相关《基于JAVA实现聊天室.docx(23页珍藏版)》请在冰豆网上搜索。
![基于JAVA实现聊天室.docx](https://file1.bdocx.com/fileroot1/2023-1/12/ef1be60a-a4b1-401c-a50a-0c1a2d23ab45/ef1be60a-a4b1-401c-a50a-0c1a2d23ab451.gif)
基于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聊天室系统它的开发意义在于为人们之间相互交流提供了一个快
捷、方便的应用平台。
大型网站可以通过聊天室来提高自身的知名度,增加的访问流量
第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]。
有连接通信一般要经历以下四个基本步骤:
(1)创建Socket,建立连接;
(2)打开连接到Socket的输入/输出流;
(3)按照一定的协议对Socket进行读/写操作;
(4)关闭Socket。
第(3)步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同[5]。
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)意味着移植到一个更大更快速的服务器或多服务器时,即服务的升级和集群都会比较方便“]。
C/S软件技术是一种通用的,基于消息的技术。
在本论文中,我们这样描述C/S,
网络上的一台计算机向网络上的另外一台计算机请求一个进程或数据,如图2-1所示。
响应
图2-1C/S技术模型
Client/Server结构的优点是速度快,缺点是当Server进行更新时,Client也必需更新问。
2.4用Java实现Socket模型
首先,我们先介绍一下Socket的运行过程。
通常在服务器的指定端口被绑定一个Socket,此时服务器只是处于等待状态,监听客户的连接请求。
这个过程如图2-2所示
服务器
连接请求
客户端
图2-2服务器监听客户的连接请求
服务器一旦接收到客户机的连接请求,服务器选择一个新的端口并绑定一个新的Socket与客户端建立的Socket对,这个过程如图2-3所示。
听端
口
服务器处理连接请求
图2-3
服务器
对客户机来说,连接请求被接受,客户端的Socket便被成功创建了,Socket通信便可以开始进行。
由于Server端的输出流是服务端的输入流,Server端的输入流是服务器的输出流,反之亦然,所以,Client与Server可以通过读写各自Socket进行交流。
下面我们来看看在Java里对Socket的运行过程实现。
服务器使用ServerSocket类
来处理客户机的连接请求。
当客户机连接到服务器所监听的端口时,ServerSocket将分
配一个新的Socket对象。
这个新的Socket对象将连接到一些新端口,负责处理与之相对应客户机的通信。
然后,服务器继续监听ServerSocket处理新的客户机连接。
[13]
客户机首先创建一个Socket对象,用于和服务器的通信。
之后需创建两个对象:
DatalnputStream和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数据库系统中较为常用的一个数据库系统。
SqlServer2000可运行在windows98/NT/2000/XP等多种操作系统下[10]。
SqlServer2000的重要管理工具:
(1)服务管理器
可以通过服务管理器启动、停止、暂停SqlServer服务器的相关服务。
当操作服务器中的数据时,应该首先确保该服务器正常启动了相应的服务[13]。
(2)企业管理器企业管理器提供了一种图形化界面来操作数据库对象,在该界面中可以进行数据库、表等数据对象的创建、查询、修改、删除等操作,可以完成SqlServer2000中绝大
多数的管理工作。
(3)查询分析器查询分析器是运行、测试用户的Transact-sql语句、批处理和脚本的场所。
Transact-sql又称为t-sql)是SqlServer2000在标准的SQL语句上进行了扩充的语言,是交互式的结构化查询语言,能够完成对SqlServer2000数据库的所有操作。
SQL(structuredqueryIanguage结构化查询语言)起源于IBM的实验室,目前SQL语言已经成为操作和检索关系数据库中数据的标准语言。
在ASP中,只要访问数据库,就必然会使用SQL语言。
第3章系统需求分析
3.1系统任务描述
本系统是采用Java基于C/S开发的聊天室。
管理员在经过登录界面进入管理员界面,即系统的服务器端并启动服务器后。
此时,如果有用户登录会在服务器端显示登录用户的用户名和当前连接的用户人数,如果有用户聊天,服务器会显示出聊天信息。
管理员在管理界面中可以随时关闭服务器。
此时,所有的客户端都将失去和服务器端的连接,从而,用户所有的聊天信息发送将不成功。
用户只需要在登录界面中输入正确的用户名和密码即可登录聊天室并且连接上服务器。
在聊天室中,用户可以和聊天室中所有的用户发送信息,还可以接收所有用户发送的信息,可以查看到当前服务器的状态。
如果用户已经登录了聊天室,而服务器还没有启动,则用户是不可以利用聊天室收发信息的。
如果在运行过程中,服务器断开则系统会有提示。
3.2系统功能分析
3.2.1系统的功能需求
聊天室程序通常需要完成以下一些基本功能:
(1)登录聊天室;
(2)启动服务器;
(3)关闭服务器;
(4)用户之间的聊天;
(5)退出聊天室。
本系统具体功能需求如下:
(1)聊天室管理员经登录界面登录到管理界面,即系统的服务器端。
用户经登录界面都进入聊天大厅。
两类界面根据系统使用者的角色不同,登录界面也有所不同。
(2)不论是管理员还是用户都需要在登录界面输入正确的用户名和密码后才可以登录到各自的界面中去。
(3)系统的两个主要界面都是为方便管理员和用户操作的。
首先,管理员进入到管理界面后可以方便的启动/停止服务器,看到在线用户的信息和聊天信息。
用户进入到聊天大厅中可以聊天,查看服务器状态。
(4)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。
(5)用户的聊天信息录入,重写,发送,接收方便,快捷。
(6)服务器状态,聊天信息和在线用户人数及时刷新。
(7)显著提高工作效率,减少人力、物力资源的投入。
聊天室系统运行稳定、安全性高、性能可靠。
3.2.2系统数据流图
系统的顶级数据流图如图3-1所示
图3-1系统顶级数据流图
管理员的操作经过聊天室系统将反馈给管理员自己和用户。
情况1:
管理员启动服
务器,管理员界面将出现用户连接信息和用户的聊天信息,用户在登录后可以进入到聊天界面中。
情况2:
管理员停止服务器,管理员界面中所有的用户信息都将不再刷新,而用户所在聊天界面都将有服务器停止的提示。
用户的操作经过聊天室系统将反馈给用户(包括自己)和管理员。
用户的用户名,聊天信息在管理员界面都可以显示出来。
用户的聊天信息可以在自己和其他用户的界面上显示。
管理员界面2级数据流图:
图3-2管理员界面2级数据流图
聊天室界面2级数据流图:
323系统数据分析
在仔细调查聊天室过程的基础上,总结出该系统需要满足以下系统数据的需求:
系统管理员资料。
包括管理员用户名和管理员密码。
用户信息记录用户的资料。
包括用户的用户名、登录密码、真实姓名、电话、传真、所属地区。
聊天室系统总体E-R图如图3-4所示:
图3-4聊天室系统总体E-R图聊天室系统管理员属性图如图3-5所示:
图3-5管理员属性图
聊天室系统客户个人资料属性图如图3-6所示:
客户
图3-6客户个人资料属性图
3.3系统可行性分析
从技术发面来看,Java语言的优点主要表现在:
简单、面向对象、多线程、安全性等方面。
(1)简单性
Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。
Java实现了自动的垃圾收集,简化了内存管理的工作。
这使程序设计更加简便,同时减少了出错的可能。
⑵面向对象
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的增强功能,
语言的支持。
从自身能力来看,本人在大学三年级时对Java语言进行过一个学期的系统学习,对Java有一定的了解和掌握。
虽然对Java的网络编程不是很熟悉,但是通过到图书馆查阅书籍和网上收集资料,现在对Java网络编程有了一定的了解。
第4章系统设计
系统设计是本系统开发的重要阶段,它直接影响到目标系统的质量,是整个开发工作的核心。
系统设计阶段的主要任务是:
在系统分析提出的逻辑模型的基础上,科学合理地进行物理模型设计。
系统设计分为:
总体设计和详细设计。
总体设计包括子系统的划分和模块设计,详细设计包括各模块的详细描述、输入输出设计等。
系统设计遵循的原则是:
系统性、适应性、稳健性、经济性。
4.1系统总体结构设计
本系统是用Java语言基于C/S开发设计的,其核心的Socket技术决定了该系统的安全性和稳定性,从而保证了本系统有较强的使用性。
其最重要的功能就是实现了聊天信息的快速性,改变了传统的面对面聊天信息不确定因素多,安全性低的状况。
聊天室设计图如图4-1所示。
服务器使用多线程,每个线程对应一个客户端,但线程通过客户代理同客户端交流,在客户代理中有两个重要信息:
一个是用户名,一个是用户名对应的Socket。
客户向服
务器请求连接后,客户代理的Socket字段便被实例化,当用户登录后,客户代理的用户名字段被实例化,一个完整的客户代理生成了。
对客户端来说用户名是可见的,客户端提供对用户名的操作。
对服务器端来说,Socket是可见的,服务器通过用户名操作Socket,进而回应客户端的请求。
基于C/S的Java聊天室系统的作用是提供给人们一个平台进行相互交流,在交流的
过程中可能出现的情况也是不同的。
因此,可将系统分成两大模块:
服务器端模块和客户端模块。
系统功能模块图如图4-2所示:
基于JAVA实现聊天室
图4-2系统功能模块图
1服务器端模块介绍:
该模块分为管理员登录和服务器管理两个子模块。
首先,管理员登录是指管理员通过输入用户名和密码进入到管理员界面,即系统的服务器端。
而服务器管理是指管理员进入到服务器端界面后,对系统的服务器端所做的一些操作,如启动、停止服务器,查看当前用户连接人数,和用户的聊天信息。
2、客户端模块介绍:
该模块分为用户登录和聊天室两个子模块。
首先,用户登录是指用户通过输入用户名和密码进入到聊天室中,并且聊天室自动连接上服务器。
聊天室模块是指系统聊天室所具有的基本功能,如发送、接收信息,查看当前和服务器的连接状态,显示发送和接收的信息。
4.2数据库设计
本次数据库开发工具为MicrosoftSQLServer2000,具体设计的表单如下:
用户信息表:
表4-1用户信息表
字段名
;类型
大小
允许空
备注
username
nvarchar
20
否
用户名
password
nvarchar
20
否
密码
Truename
nvarchar
10
是
真实姓名
country
nvarchar
16
是
所属地区
fav
nvarchar
20
是
传真
tel
nvarchar
20
是
电话
管理员信息表:
表4-2管理员信息表
字段名
类型
大小
允许空
备注
username
nvarchar
20
否:
用户名
password
nvarchar
20
否
密码
4.3系统功能模块详细设计
管理员登录模块流程图如图4-3所示:
开始
输入用户名与密码
进入管理员界面
结束
图4-3管理员登录模块流程图
下面对管理员登录程序流程图做简要叙述。
首先,管理员在登录界面中输入管理员用户名和密码,并向系统发送。
系统在收到发送信息后查询数据库,如果在数据库中存有相同的信息,则运行管理员界面。
如果在数据库中没有相同信息,则系统提示错误,并返回登录界面。
服务器管理模块流程图如图4-4所示:
开始
<
1F
管理员界面
启动服务器
查看在线用户人数
查看聊天信息
关闭服务器
结束
图4-4服务器管理模块流程图
下面对服务器管理程序流程图做简要叙述。
首先,管理员通过登录界面进入到管理员界面中。
在此界面中可以实现对系统服务器的启动和关闭,查看在线用户人数和用户的聊天信息。
用户登录模块流程图如图4-5所示:
下面对用户登录程序流程图做简要叙述。
首先,用户在登录界面中输入用户名和密码经过系统验证后进入到聊天室中,同时,如果服务器已经启动,系统自动将聊天室连接上服务器,用户可以使用聊天室,并且在服务器端有用户登录的提示。
如果服务器没有启动,则用户可以进入到聊天室,但是使用不了聊天室。
聊天室模块流程图如图4-6所示:
开始
图4-6聊天室模块流程图
下面对聊天室程序流程图做简要叙述。
用户在登录界面中输入用户名和密码进入到聊天室中。
在此界面中用户可以实现向其他用户发送信息,接收其他用户发送的信息,查看当前和服务器的连接状态。
第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.is