基于Java的聊天室程序设计.docx
《基于Java的聊天室程序设计.docx》由会员分享,可在线阅读,更多相关《基于Java的聊天室程序设计.docx(40页珍藏版)》请在冰豆网上搜索。
![基于Java的聊天室程序设计.docx](https://file1.bdocx.com/fileroot1/2022-11/26/9d887151-e0ee-4bfe-8ea2-1557530210f2/9d887151-e0ee-4bfe-8ea2-1557530210f21.gif)
基于Java的聊天室程序设计
基于Java的聊天室程序设计
CHATROOMPROGRAMMINGBASEDONJAVA
专业:
计算机科学与技术
姓名:
指导教师姓名:
申请学位级别:
学士
论文提交日期:
学位授予单位:
天津科技大学
摘要
网络聊天室是一种应用广泛的网络聊天方式,操作简单,功能丰富,是教学和学习面向对象的编程思想的理想项目。
可以使用多种编程语言和开发功能完善网络聊天室。
本毕业设计论文介绍用Java语言设计和实现一个网络聊天室的过程,本系统采用C/S架构设计,整个项目分为服务器端和客户端。
使用最新Java2标准Swing组件,开发出简洁美观和布局合理的用户和服务器界面;利用Socket网络开发急速实现客户端和服务器端的连接访问,实现网络功能;通过对数据流操作的合理设计,实现信息传递、接受和数据保存。
同时采用多线程、多任务的设计思想开发出性能稳定,功能全面的服务器。
完整的实现系统的功能。
该聊天室工具主要解决了两方面的问题。
服务器端和客户端。
在服务器端可以实现如下功能:
能够处理用户的注册;通过身份验证方式处理用户登录;可以向所有在线用户广播信息;对于不良聊天人士给予警告或者赶出聊天室;删除长久不使用的用户信息;配有操作文档;及时接收用户的服务请求帮助。
在客户端可以实现如下功能:
聊天信息的传输,支持私聊,支持表情等功能。
关键词:
聊天室;Java;Swing组件;Socket技术
ABSTRACT
Thenetworkchatroomisakindofappliedextensivenetworkchatmethod,operateincaseandthefunctionisabundant,ItcanbeusedasagoodcaseforlearningofJavadesignlanguageandtheObject-OrientedProgramminglanguage,Thereismanyprogramminglanguageofdesigntodevelopanetworkchatroomwithperfectfunction.
ThisgraduationthesisofdesignintroductionhowtousetheJavalanguagedesignandcarryoutnetworkchatroom,ThesystemadoptiontheC/Sstructuredesign,thewholesystemisdividedintotheserverandclient.UsedstandardmodulesofSwingoflatestJava2,developasimpleanddirectbeautyuserinterface,WemakeuseoftheSockettechnologytointerconnecttheserverandclientbynet-work;organizethedatabygooddesignofdatastreamtosentoracceptthemessagebetweenusersandtorecordthemessagefordataever;wealsousethemulti-threadtomaketheprogramwithmanyfunction.
Thischatroom’stoolwillsolvetwomainproblems,oneisserverandtheotheriscustomer.Itwillobtainfollowingfunctionswithserver:
handingtheregistrationofcustomer;passingverificationofbodymethod;processingcustomerlogging;broadcastinginformationtoon-linecustomers;warningandevictingbadchatpersonageoutofchatroom;deletinglong-lastthecustomerinformation;havingoperatingtext;acceptingcustomer’sservingrequests.Itwillobtainfollowingfunctionswithcustomer:
deliveringthechatinformation;supportingprivatechat;supportingthefacialexpression;ect.
Keywords:
chat;Java;Swingcomponent;Socket
第一章系统开发的意义及需求分析
第一节课题来源
根据当前网络的需求,网络聊天越来越受到各种网民所青睐。
因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流。
而本人也学习过Java语言,对网络编程也较有兴趣,为了更好的考验自己对Java语言的掌握程度,本人就决定以《基于Java的网络聊天室》为毕业设计,希望通过这一次能进一步提高本人的网络开发编程的能力。
第二节需求分析
聊天系统不外乎两个方面,服务器端和客户端。
简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。
首先来看一下服务器。
服务器端的任务:
1、服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接。
2、服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。
以上就是服务器端最主要的两个任务。
不难看出,服务器端的任务并不复杂。
客户端应该完成的工作包括:
1、与服务器端建立通信通道,向服务器端发送信息。
2、接收来自服务器的信息。
相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述四个问题,即完成了该聊天系统的核心。
第二章系统开发技术
第一节Java的网络功能与编程
一、Java概述:
美国硅谷有一句行话,每10年~15年有一次轮回。
最近的一次轮回就是从Java开始。
Java是一个由Sun公司开发而成的新一代编程语言。
使用它可在各式各样不同种机器、不同种操作平台的网络环境中开发软件。
不论你使用的是哪一种www浏览器,哪一种计算机,哪一种操作系统,只要www浏览器上面注明了“支持Java”,你就可以看到生动的主页。
Java正在逐步成为Internet应用的主要开发语言。
它彻底改变了应用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。
Java语言有下面一些特点:
简单、面向对象、分布式、解释执行、安全、体系结构中立、可移植、高性能、多线程以及动态性。
丰富的类库Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。
语言包提供的支持包括字符串处理、多线程处理、数学函数处理等,可以用它简单地实现Java程序的运行平台。
实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。
输入输出包用统一的"流"模型来实现所有格式的I/O,包括文件系统、网络、输入低级网络包用于实现Socket编程。
抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同平台的机器。
网络包支持Internet的TCP/IP协议,提供了与Internet的接口。
它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。
Java和C、C++对于变量声明、参数传递、操作符、流控制等使用了相同的传统,使得熟悉C、C++的程序员能很方便地进行编程。
同时,Java为了实现其简单、安全等特性,也摒弃了C和C++中许多不合理的内容[1]。
二、Java语言在网络上的应用
Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。
例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。
在编程处理上,一般先生成一个URL类型的对象,然后用Java中相应的方法(method)获取该对象所代表的资源。
第二节IP/TCP协议常识
一、IP、TCP协议的特点:
TCP/IP(TransmissionControlProtocol/InternetProtocol)是传输控制协议/网际协议的缩写,TCP/IP是当今网络互联的核心协议。
TCP/IP协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。
IP协议的作用:
第一,它是网络层的协议,提供互联网上数据传输的统一格式。
第二,提供不可靠的无连接的服务。
第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。
TCP协议的功能:
差错控制——可靠性、面向连接、分段(Segment)、端口号。
TCP是传输控制协议,是面向连接的提供了一种可靠的传输服务,它用三次握手和滑动窗口机制来保证传输的可靠性,及进行流量控制。
二、TCP/IP协议进行传输数据传输的过程:
应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP数据包封装在IP包内,通过网络送给目的TCP。
接收方TCP在接收到数据后通知上层应用程序,TCP将保证接收数据的正确性。
在实现TCP的主机上,TCP可以被看成是一个模块,和文件系统区别不大,TCP也可以调用一些操作系统的功能,TCP不直接和网络打交道,控制网络的任务由专门的设备驱动模块完成。
TCP只是调用IP接口,向TCP提供所有TCP需要的服务[2]。
三、端口号:
有的时候,一个ip地址不能完整的标识一台服务器,这是因为一台物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是端口。
端口实际是一个16位长的地址,他的范围是0~65535之间,其中0~1023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都知道的,1024~65535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的个客户端应用程序。
在数据传输过程中,各种服务器不断的检测分配给他的端口,一边发现要求和他通信的客户端[3]。
第三节Socket的简介
Socket简称套接字,用于实现网络上客户和服务器之间的连接。
也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。
Java通过socket来完成它所有的网络底层的通讯,socket是一种通讯的通道,通过它可以将数据通过特定的端中发送及接收。
Java中的socket可以分成二大类:
DatagramSockets(数据包socket)和StreamSockets(流socket)。
StreamSocket有一个永久性的链接,可以确保数据可靠的发送到对方。
但是StreamSocket所占的资源更多。
Java主要通过Socket及ServerSocket来实现StreamSocket,一个用于客户端,另一个用户服务器端。
具体的说:
一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服务器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。
服务器也通过它的本地端口连接一个Socket,通过读写和客户端通信[8]。
客户机必须知道有关服务器的IP地址。
对于着一点Java也提供了一个相关的类InetAddress该对象的实例必须通过它的静态方法来提供。
它的静态方法主要提供了得到本机IP和通过名字或IP直接得到InetAddress的方法。
上面的方法基本可以建立一条连线让两台计算机相互交流了。
数据则是通过I/O流进行传输。
因为底层的网络是继续数据的。
除非远程调用,处理问题的核心在执行上。
所以你也必须导入Java.io这个包。
Java的IO操作也不复杂。
它提供了针对于字节流和Unicode的读者和写者,然后也提供了一个缓冲用于数据的读写。
而原始的字节流来源于Socket的两个方法,getInputStream()和getOutputStream()方,分别用来得到输入和输出。
服务器可以不断接收客户机所写入的信息只到。
客户机发送"End"字符串就退出程序。
并且服务器也会做出"Receive"为回应。
Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。
调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。
Socket执行体为你管理描述符表。
两个网络程序之间的一个网络连接包括五种信息:
通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。
Socket数据结构中包含这五种信息。
一、Socket程序的工作过程:
1.建立Socket连接:
在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。
2.数据通信:
利用虚拟连接通道传送数据信息进行通信。
3.关闭:
通信结束时,再将所建的虚拟连接拆除。
具体如下:
图2-1Socket程序的工作过程
二、三次握手协议:
第一次握手:
原主机发送一个带有本次连接的序号的请求的一个数据帧
第二次握手:
目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。
第三此握手:
源端机收到含有两次初始序列号的应答后,再向目的主机发送一个带有两次连接的序列号的确认。
具体过程如下:
图2-2三次握手协议
第四节Swing的简介
AWT是Swing的基础。
Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。
AWT设计的初衷是支持开发小应用程序的简单用户界面。
例如AWT缺少剪贴板、打印支持、键盘导航等特性,而且原来的AWT甚至不包括弹出式菜单或滚动窗格等基本元素。
随着发展的需要,Swing出现了,Swing组件几乎都是轻量组件,与重量组件相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。
Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。
由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。
Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。
Swing采用了一种MVC的设计范式,即“模型-视图-控制”(Model-View-Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。
Swing外观感觉采用可插入的外观感觉(PluggableLookandFeel,PL&F)。
在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。
Swing使得程序在一个平台上运行时能够有不同的外观。
用户可以选择自己习惯的外观。
一、框架、监听器和事件:
框架(Frame,JFrame)是Java图形用户界面的基础,它就是我们通常所说的窗口,是Windows/XWindow应用程序的典型特征。
说到Windows/XWindow,大家很容易联想到“事件(Event)驱动”。
Java的图形用户界面正是事件驱动的,并且由各种各样的监听器(Listener)负责捕捉各种事件。
如果我们需要对某一个组件的某种事件进行捕捉和处理时,就需要为其添加监听器。
比如,我们要在一个窗口(JFrame)激活时改变它的标题,我们就需要为这个窗口(JFrame对象)添加一个可以监听到“激活窗口”这一事件的监听器——WindowListener。
添加监听器通常由组件类提供的一个addXxxxxListener的方法来完成。
比如JFrame就提供有addWindowListener方法添加窗口监听器(WindowListener)。
二、按钮、切换按钮、复选按钮和单选按钮
切换按钮,有两种状态的按钮,即按下状态和弹起状态,若称为选择状态或未选择状态。
复选按钮,又叫复选框,用一个小方框中是否打勾来表示两种状态。
单选按钮,又叫收音机按钮,以小圆框打点表示被选中。
常成组出现,一组单选按钮中只有一个能被选中。
除一般按钮外,其余三种按钮都有两种状态,即选择(按下)状态和未选择(弹起)状态。
那么我们又该如何判断呢?
切换按钮(JToggleButton)提供了一个isSelected()方法用来判断当前所处的状态,返回值为真(true)时表示它处于选择状态,返回值为假(false)时表示它处于未选择状态。
而复选按钮(JCheckBox)和单选按钮(JRadioButton)都是从JToggleButton继承的,所以也具有isSelected()方法。
三、文本输入框、密码输入框
文本输入框包括两种,单行文本输入框(JTextField)和多行文本输入框(JTextArea)。
密码输入框则只有一种(JPasswordField)。
JPasswordField是JTextField的子类,它们的主要区别是JPasswordField不会显示出用户输入的东西,而只会显示出程序员设定的一个固定字符,比如'*'或者'#'。
四、窗格、滚动窗格和布局管理
窗格(JPanel)和滚动窗格(JScrollPane)在图形用户界面设计中大量用于各种组件在窗口上的布置和安排。
这里所谓的布置和安排,就是布局(Layout)。
将加入到容器(通常为窗口等)的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。
布局由布局管理器(LayoutManager)来管理。
我们设计一个窗口,其中是要添加若干组件的。
为了管理好这些管理的布局,我们就要使用布局管理器。
比如说,设计一个简单的编辑器,这个编辑器中只需要放置两个按钮和一个多行文本框。
这些组件是是按照一定的位置关系较规范的安排的。
那么,为了按照一定的位置关系安排这些组件,需要用到布局管理器了。
常用的布局管理器有:
FlowLayout、BorderLayout、GridLayout、BoxLayout等,其中FlowLayout和BorderLayout最常用。
第五节C/S结构
C/S结构,即大家熟知的客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
Client/Server或客户/服务器模式:
Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。
一、C/S工作模式
C/S结构的基本原则是将计算机应用任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布”原则。
客户端完成数据处理,数据表示以及用户接口功能;服务器端完成DBMS的核心功能。
这种客户请求服务、服务器提供服务的处理方式是一种新型的计算机应用模式。
二、C/S结构的优点
C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。
对应的优点就是客户端响应速度快。
缺点主要有以下几个:
只适用于局域网。
而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。
这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。
客户端需要安装专用的客户端软件。
首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。
特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。
还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。
第三章系统分析与设计方案
第一节开发环境及工具
本系统所用的工具:
服务器端:
(Windows平台)首先应有Java环境jdk,建议采用jdk1.4.2;Eclipse。
客户端:
Java环境jdk,建议jdk1.42;Eclipse。
本系统运行所需用到的环境为:
硬件配置:
中央处理器(CPU):
P42.0G以上的处理器;
硬盘:
40GB以上硬盘;
内存:
256以上的DDR内存;
显卡:
128M以上显存显卡
软件配置:
WINDOWSXP版本、All-In-One-Eclipse-311、j2sdk-1.42等。
第二节聊天系统的总体设计要点
一、实现思想
在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。
因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
服务器端工作流程:
服务器端通过系统调用创建一个ServerSocket与指定的本地端口绑定,就可以在端口进行侦听。
如果有客户端连接请求,则创建一个Socket,将客户端地址赋给这个Socket。
然后登录成功的客户就可以在服务器上聊天了。
客户端工作流程:
客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。
二、系统功能流图:
图3-1系统功能流图
功能流说明如下:
1.启动服务器程序,服务器端创建一个ServerSocket对象,指定端口号。
2.ServerSocket对象等候客户端的连接请求。
3.启动客户端程序,登录用户。
如果未注册,先注册再登录。
登录成功进入聊天室用户界面。
4.客户端创建一个Socket对象,指定主机地址和端口号,向服务器发送连接请求。
5.服务器端收到客户端请求,建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象