基于Java即时聊天系统的设计与实现毕业论文.docx
《基于Java即时聊天系统的设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《基于Java即时聊天系统的设计与实现毕业论文.docx(26页珍藏版)》请在冰豆网上搜索。
基于Java即时聊天系统的设计与实现毕业论文
毕业设计
设计题目:
学生姓名:
学院名称:
专业名称:
班级名称:
学号:
指导教师:
教师职称:
学历:
基于Java即时聊天系统的设计与实现
摘要:
网络络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。
目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。
该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。
前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。
后者通过与服务器建立连接,来进行客户端与客户端的信息交流。
其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。
开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。
经过分析这些情况,该聊天工具采用Eclipse为基本开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统
关键词:
即时通讯系统 B/S C/S MySQL Socket Swing
Abstract:
Therapiddevelopmentofcomputernetworktechnologytoday,moreimmediatemeansofcommunicationbypeopleofallages.Real-timechattoolinachievingthetransmissionofvideoandaudioinformation,sothatmemberscancollaborateremotelyintuitive,realaudioandvisualcommunicationatthesametime,useofmultimediatechnology,itcanalsohelpuserstoworkinallkindsofinformationprocessing.
Studyofthisissueistosupporttheexchangeofinternalnetworksystems-networkinstantmessagingsystem.ThesystemusesJavaprogramminglanguage.SystemusestheC/Sstructuremode,supportforLANandInternet.Thesystemusesthewaterfallmodelofsoftwaredevelopmentprojectswerediscussedsystemrequirementsanalysis,outlinedesign,detaileddesignandcoding,andrunandtestthewholesystem.Finally,thepaperconcluded.
Keywords:
InstantMessager;System;B/SC/SMYSQLSocketSwing
1前言
目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为LiveMessenger)以及跨平台Gaim等。
本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。
1.1课题选题背景
随着计算机网络技术的发展,网络聊天工具已经成为人们日常交流的一种重要工具。
它通信速度快,成本低,更重要的是方便人们信息的交流和资料的传递,所以开发一个易于操作并拥有友好界面的聊天工具可以较好地解决现实生活中通信费用高昂以及电话的单线程通信等问题[1]。
QQ聊天系统是一款基于互联网的即时通信系统,它允许人们利用英特网技术实时地传送信息,并且能让用户选择性地接受或拒绝其他用户的信息。
由于QQ有着出色的通信性能并且其用户普及度较高,因此本课题在模仿QQ的前提下,设计了一款具有聊天功能及其他附加功能的软件
目前即时聊天系统种类众多,功能也较为齐全。
该课题现在所研究的即时通讯系统,其目标是定位于企业内部网络,解决企业或单位的沟通及协同的问题,提高工作效率。
企业内部员工可以利用该通讯系统随时随地发送文字消息、进行多人群聊、消息群发、传送文件、音频视频对话等。
系统包括客户端程序和服务器端程序,支持局域网和Internet。
企业内部员工之间可以在内部网覆盖的任何地点、任何时间进行即时交流,真正实现企业内部协同工作。
使您不必花费大量的时间、金钱聚集到一个地方,通过网络,就能实现面对面的沟通,提高了效率。
MSN、QQ等公共消息系统,由于聊天对象及内容的不可控,若在企业内部使用,可能会降低工作效率。
而该即时通讯系统将自己的服务器端安装在企业内,并且人员的创建是由系统管理员来完成,因此很好的解决了这个问题。
随着计算机网络技术的发展,网络聊天工具已经成为人们日常交流的一种重要工具。
它通信速度快,成本低,更重要的是方便人们信息的交流和资料的传递,所以开发一个易于操作并拥有友好界面的聊天工具可以较好地解决现实生活中通信费用高昂以及电话的单线程通信等问题[1]。
QQ聊天系统是一款基于互联网的即时通信系统,它允许人们利用英特网技术实时地传送信息,并且能让用户选择性地接受或拒绝其他用户的信息。
由于QQ有着出色的通信性能并且其用户普及度较高,因此本课题在模仿QQ的前提下,设计了一款具有聊天功能及其他附加功能的软件
1.2需求分析
聊天系统最重要的是服务器端和客户端两个方面。
服务器端有两个主要任务:
(1)服务器端应当建立一个ServerSocket,并且不断进行监听,判断是否有客户端连接请求或断开连接。
(2)服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息给客户端。
客户端要完成的工作:
(1)与服务器端建立通信通道,向服务器端发送信息。
(2)接收来自服务器的应答信息。
解决了上述的4个问题,也就完成了聊天系统的核心任务。
1.3系统设计要点
聊天系统的设计主要是提供满足用户双方直接进行实时聊天的服务,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:
(1)实现思想
在Internet上的聊天程序一般都是以服务器提供服务端连接响应,用户通过客户端程序登录到特定服务器,即可与登录在同一服务器上的用户进行交流,这是一个面向连接的通信过程。
因此,要在TCP/IP环境下[4-5],实现服务器端和客户端两部分程序。
(2)服务器端工作流程
服务器端通过socket()系统创建一个ServerSocket来对客户端进行接收,并与指定的本地端口绑定bind(),就可以在端口进行监听listen()。
Map用以存储用户姓名和对应的Socket。
通过ChatRoomServerThread线程类来处理不同请求。
如果有客户端连接请求,则给出一个相应的Socket,将客户端地址赋给这个Socket。
登录成功的用户就可以在服务器上聊天。
(3)客户端工作流程
客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据即可。
2涉及的相关技术及协议
为了保证课题能正常实施,先来分析一下课题所需要的相关技术和协议。
2.1Java语言
经过认真的讨论分析,综合各种计算机高级语言的特征和适应范围,最终决定选择纯面向对象的Java语言来完成毕业论文的设计,下面就技术可行性方面,对Java语言作一简要介绍。
Sun公司的口号就是“网络就是计算机”,Java能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。
使用Java语言,可以相对轻松的一天编写一个有条理的网络程序。
今天,Java的网络功能正在飞跃发展,不断有新的特性增加到这个有价值的基础上,JavaSoft实验室正在不断努力使Java更加完善。
就Java语言的主要特点,本人归纳如下:
Java程序设计的开发过程与运行环境Java是解释型的高级编程语言,所以Java程序的开发通常需要经过编写源程序、编译生成字节码和运行三个过程。
这里要提到,Java应用程序的开发周期包括编译、下载、解释和执行几个部分。
Java编译程序将Java源程序翻译为JVM可执行代码—字节码。
这一编译过程同C/C++的编译有些不同。
当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。
因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。
Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。
这样就有效的保证了Java的可移植性和安全性。
【2】
2.2C/S模式介绍
20世纪90年代出现并迅速占据主导地位的一种计算模式为客户机/服务器模式,简称为C/S模式,它实际上就是把主机—终端模式中原来全部集中在主机部分的任务一分为二,保留在主机上的部分负责集中处理和汇总运算,成为服务器;而下放到终端的部分负责为用户提供友好的交互界面,称为客户机。
【3】相对于以前的模式,C/S模式最大的改进是不再把所有软件都装进一台计算机,而是把应用系统分成两个不同的角色和两个不同的地位:
一般在运算能力较强的计算机上安装服务器端程序,而在一般的PC上安装客户机程序。
正是由于个人PC机的出现使客户机/服务器模式成为可能,因为PC机具有一定的运算能力,用它代替了上面第一种模式的哑终端后,就可以把主机端的一部分工作放在客户机端完成,从而减轻了主机的负担,也增加了系统对用户的响应速度和响应能力。
客户机和服务器之间通过相应的网络协议来进行通讯。
客户机向服务器发出数据请求,服务器将数据传送给客户机进行计算,计算完毕,计算结果可返回给服务器。
这种模式的优点充分利用了客户机的性能,使计算能力大大提高;另外,由于客户机和服务器之间的通讯是通过网络协议进行的,是一种逻辑的联系,因此物理上在客户机和服务器两端是易于扩充的。
C/S模式是目前占主流的网络计算模式。
该模式在操作过程中采取的是主动请示方式:
首先服务器方要先启动,并根据请示提供相应服务(过程如下):
(1)打开一个通信通道同时通知本地主机,服务器愿意在某一个公认地址上接收客户请求。
(2)等待某个客户请求到达该端口。
(3)接收到重复服务请求,处理该请求并发送应答信号。
(4)返回第二步,等待另一客户请求。
(5)关闭该服务器。
客户端:
(1)打开一个通信通道,并连接到服务器所在主机的特定端口。
(2)向服务器发送服务请求报文,等待并接收应答;继续提出请求。
(3)请求结束后关闭通信通道并终止。
分布运算和分布管理是客户机/服务器模式的特点。
最后选择了C/S模式。
3系统需求分析
前面两章介绍了课题的选题背景和相关的技术基础和协议。
在本章中将讨论一下即时通讯系统的需求分析。
3.1可行性分析
经济可行性:
由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。
技术可行性:
本系统的开发利用MicrosoftSQLServer2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。
学校校园网的建设也为新系统服务器/客户端的结构提供了硬件的支持。
使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。
运行可行性:
本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。
综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。
3.2系统功能需求
本系统主要通过客户端,服务器端来体现聊天系统的基本功能。
(1)服务器端
1.处理用户注册
2.处理用户登录
3.处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容
4.处理用户得到信息
5.处理用户退出
6.服务器踢人。
7.保存服务器日志.
8.保存用户聊天信息。
(2)客户端
1.用户注册界面及结果
2.用户登录界面及结果
3.用户发送信息界面及结果
4.用户得到信息界面及结果
5.用户退出界面及结果
3.3即时消息的安全需求
A发送即时消息M给B,有以下几种情况和相关需求:
(1)如果无法发送,A必须接到确认;
(2)如果M被投递了,B只能接受M一次;
(3)协议必须为B提供方法检查A发送了这条信息;
(4)协议必须允许B使用另一条即时信息,回复信息;
(5)协议必须为A提供方法保证没有其他个体C可以篡改M;
3.4即时信息加密和鉴别
(1)协议必须提供方法保证通知和即时消息的置信度,未被监听或者破坏;
(2)协议必须提供方法保证通知和即时消息的置信度,未被重排序或者回放;
(3)协议必须提供方法保证通知和即时消息被正确的实体阅读;
(4)协议必须允许客户自己使用方法确保信息的不被截获,不被重放和解密。
3.5即时通讯系统需求
3.5.1注册需求
(1)即时通讯系统拥有多个账户,允许多个用户注册;
(2)一个用户可以注册多个ID;
(3)注册所使用的帐号类型为字母ID。
3.5.2通讯需求
(1)用户可以传输文本消息;
(2)用户可以传输RTF格式消息;
(3)用户可以加密/解密消息等。
4系统设计
在这里我们将该即时通讯系统命名为CHAT,现在对该系统进行总体设计。
采用客户机/服务器(C/S)的模式来设计,是一个2层的C/S结构:
应用程序服务器→应用程序客户端,其分层机构如图1所示。
图12层C/S结构示意图
客户层也叫做应用表示层,也就是我们说的客户端,这是应用程序的用户接口部分。
给即时通讯工具设计一个客户层具有很多优点,这是因为客户层担负着用户与应用间的对话功能。
它用于检查用户的输入数据,显示应用的输出数据。
为了使用户能直接地进行操作,客户层需要使用图形用户接口。
若通讯用户变更,系统只需要改写显示控制和数据检查程序就可以了,而不会影响其他两层。
服务层又叫做功能层,相当于应用的本体,它是将具体的业务处理逻辑编入程序中。
例如,用户需要检查数据,系统设法将有关检索要求的信息一次性地传送给功能层;而用户登录后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。
在应用设计中,必须避免在表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。
4.1即时聊天系统的实施原理
4.1.1工作方式和技术原理
典型的IM工作方式如下:
登陆CHAT通讯服务器,获取一个自建立的历史的交流对象列表(同事列表),然后自身标志为在线状态,当好友列表中的某人在任何时候登录上线并试图通过你的计算机联系你时,IM系统会发一个消息提醒你,然后你能与他建立一个聊天会话通道进行各种消息如键入文字、通过语音等的交流,从技术上来说,聊天系统的基本技术原理如下:
第一步,用户A输入自己的用户名和密码登录IM服务器,服务器通过读取用户数据库来验证用户身份,如果验证通过,登记用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号,然后返回用户A登录成功的标志,此时用户A在IM系统中的状态为在线(OnlinePresence)。
第二步,根据用户A存储在IM服务器上的好友列表(BuddyList),服务器将用户A在线的相关信息发送给也同时在线的IM好友的PC机,这些信息包括在线状态、IP地址、IM客户端使用的TCP端口(Port)号等,IM好友的客户端收到此信息后将在予以提示。
第三步是IM服务器把用户A存储在服务器上的好友列表及相关信息回送到他的客户端机,这些信息包括也在线状态、IP地址、IM客户端使用的TCP端口(Port)号等信息,用户A的IM客户端收到后将显示这些好友列表及其在线状态。
4.1.2通讯方式
(1)在线直接通讯
如果用户A想与他的在线好友用户B聊天,他将直接通过服务器发送过来的用户B的IP地址、TCP端口号等信息,直接向用户B的PC机发出聊天信息,用户B的IM客户端软件收到后显示在屏幕上,然后用户B再直接回复到用户A的PC机,这样双方的即时文字消息就不再IM服务器中转,而是直接通过网络进行点对点的通讯,即对等通讯方式(PeerToPeer)。
【5】
(2)在线代理通讯
用户A与用户B的点对点通讯由于防火墙、网络速度等原因难以建立或者速度很慢,IM服务器将会主动提供消息中转服务,即用户A和用户B的即时消息全部先发送到IM服务器,再由服务器转发给对方。
4.2软件设计流程
因为该系统其需求是十分明确的,所以该系统的开发流程采用瀑布模型进行设计,分为几大步骤:
先进行需求分析,再是系统设计,然后是详细设计与编码,其次是软件的测试,最后是软件的运行和维护。
【6】在实际过程中这些步骤经常是重叠和彼此间有信息交换,它不是一个简单线性过程,而是包括开发步骤的多个反复。
如图2所示。
图2即时通讯系统开发流程图
4.3功能模块划分
该即时聊天工具按如下过程完成通信:
(1)客户向服务器注册,告知服务器该客户监听某主题;
(2)客户注册之后,向服务器发送消息;
(3)服务器再把消息发送给所有监听此主题的客户。
根据以上描述,该系统功能模块图请见图3。
图3通讯系统的功能模块
4.3.1服务器端
由图3可知服务器端完成至少3大功能:
建立连接、存储数据和监听客户。
这3大功能的具体含义如下:
(1)建立一个ServerSocket连接,不断侦听是否有客户端连接或者断开连接。
(2)服务器端是一个信息发送中心,所有客户端的信息都传到服务器端,再由服务器根据要求分发出去。
(3)数据库数据操作包括将用户信息存储到数据库等。
4.3.2客户端
客户端要完成4大功能:
新建立用户、用户登录、通信交流。
这些功能的含义如下:
(1)新建立用户:
客户端与服务器端建立通信信道,向服务器端发送新建用户的信息,接收来自服务器的信息进行注册。
(2)用户登录:
客户端与服务器端建立通信信道,向服务器端发送信息,完成用户登录。
(3)通信交流:
客户端可完成的信息的编辑、发送和接收等功能。
4.4数据库概要设计
因为本系统采用的是2级C/S结构模式,所以,为了减少服务器的存储量,方便程序设计,本系统只对用户信息进行存储。
利用JAVA中的框架技术进行存储。
在中,各表的映射文件可以通过工具生成,在本系统中,用户表信息可以用Xml代码实现。
用户表(user)
表1用户信息表
名称
字段名称
类别
主键
非空
用户编号
id
数字
是
是
登录名
CustName
文本
否
是
登录密码
CustPassword
文本
否
是
年龄
Age
文本
否
是
性别
Sex
文本
否
是
电子邮箱
email
文本
否
是
5详细设计
5.1服务器端的设计与实现
作为C/S模式下的系统开发,很显然服务器端程序的设计是非常重要的。
下面就服务器端的相关程序模块进行设计,并一定程度上实现了相关功能。
5.1.2主服务器类的设计
设计服务器时需要考虑如下几个因素:
(1)服务器的运行速度;
(2)服务器的响应速度,包括新建连接和发送数据的响应速度;
(3)I/O吞吐量;
(4)其他:
流量控制(QoS)、安全性。
针对TCP/IP协议的数据结构,设计服务器的程序结构需要考虑以下的因素:
(1)多线程;
(2)多进程;
(3)单线程。
主服务器类实现了服务器端的多线程,使用SeverSockets=newServerSocket(1001)语句在1001端口创建套接口;使用newServerThread(socket)语句创建新的线程。
主服务器类调用ServerThread类,而每个ServerThread实体就是一个独立的线程,刚好对应于客户端的连接请求响应线程。
服务器端有一个(或多个)进程在指定的端口等待客户的连接信息,一旦连接成功,就可以按设计的数据交换方法和格式进行数据传输。
客户端只在需要的时候向服务器端发出连接请求。
实现界面如图4。
图4服务器启动界面
现就其中一些核心代码进行讲解。
publicclassJavaServerextendsThread{}
其中public是JAVA的关键字,用来表示该类是共有,在整个程序里都可以访问到它;Class表示类定义,它后面接着用户定义的类的类名为AppServer;extends表示继承的意思,他后面的类Thread是子类,能够继承父类AppServer所定义的一些变量。
这条语言表示的意思就是声明一个公共类AppServer,用子类Thread继承父类AppServer中的一些变量。
staticbooleannewMessage。
其中,static是关键字,表示静态变量,Boolean表示变量类型为布尔型,变量名为newMessage。
这条语句的意思是定义一个静态变量newMessage,它的类型为布尔型。
值得强调的是布尔型数据只有两个值true和false,并且它们不对应人数整数值。
if(start){
sFrame.txtStatus.setText("已启动...");
log(null,"服务器已启动..");
}else{
sFrame.txtStatus.setText("关闭中...");
}
这是一条if条件判断语句,它表示变量start如果不为空,那么执行语句第一个大括号中的语句,如果为空,则执行else中的语句。
其中,log为输出语句,表示在窗口中输出“服务器已启动”信息。
publicvoidrun(){
try{while(start){
Socketclient=serverSocket.accept();
Connectioncon=newConnection(client,u,v,userInfo);
}
}catch(IOExceptione){
log(e,"不能监听!
");
}
}
这个函数的作用是监听用户信息,void表示定义的函数不需要返回值,while是循环语句关键字,在语句中的意思为直到start的值不为空,将循环执行后面括号的语句,直到start值为空后,循