即时聊天软件的开发与实现.docx
- 文档编号:29615783
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:26
- 大小:276.62KB
即时聊天软件的开发与实现.docx
《即时聊天软件的开发与实现.docx》由会员分享,可在线阅读,更多相关《即时聊天软件的开发与实现.docx(26页珍藏版)》请在冰豆网上搜索。
即时聊天软件的开发与实现
题目即时聊天软件的开发与实现
摘要
计算机网络技术高速发展的今天,即时通讯方式日益受到人们的青睐。
即时聊天工具在实现传输视频与音频信息,使协作成员可以远距离进行直观、真实的视音交流的同时,利用多媒体的技术,它还可以帮助使用者对工作中各种信息进行处理。
本课题研究的是支持内部网络交流的系统——网络即时通讯系统。
该系统使用Java语言进行编程。
系统采用C/S结构模式,支持局域网和Internet。
该系统采用软件工程的瀑布模型进行开发,分别讨论了系统的需求分析、概要设计、详细设计和编码、以及整个系统的运行和测试。
关键词:
即时聊天系统JavaC/S
1前言
交流对于人类社会及其每个成员都至关重要。
直接交流的方式包括语言、文字等,而远程交流还需借助于一些先进的工具如电话、网络等。
本课题研究的是支持内部网络交流的系统——网络即时通讯系统。
该课题在实施的过程中需要使用Java语言。
1.1课题选题背景
计算机技术、网络技术高速发展的今天,即时通讯方式日益受到人们的青睐。
即时通讯工具在实现传输视频与音频信息,使协作成员可以远距离进行直观、真实的视音交流的同时,利用多媒体的技术,它还可以帮助使用者对工作中各种信息进行处理。
大家都知道,网络上常用的即时通讯工具之一有ICQ。
其实,ICQ是英文“Iseekyou”的简称,中文意思是“我找你”。
ICQ最大的功能便是即时信息交流,只要记得对方的号码,上网时可以呼他,无论他在哪里,只要他上网打开ICQ,人们就可以随时交流。
目前即时聊天系统种类众多,功能也较为齐全。
该课题现在所研究的即时通讯系统,其目标是定位于企业内部网络,解决企业或单位的沟通及协同的问题,提高工作效率。
企业内部员工可以利用该通讯系统随时随地发送文字消息、进行多人群聊、消息群发、传送文件、音频视频对话等。
系统包括客户端程序和服务器端程序,支持局域网和Internet。
企业内部员工之间可以在内部网覆盖的任何地点、任何时间进行即时交流,真正实现企业内部协同工作。
使您不必花费大量的时间、金钱聚集到一个地方,通过网络,就能实现面对面的沟通,提高了效率。
MSN、QQ等公共消息系统,由于聊天对象及内容的不可控,若在企业内部使用,可能会降低工作效率。
而该即时通讯系统将自己的服务器端安装在企业内,并且人员的创建是由系统管理员来完成,因此很好的解决了这个问题。
即时通讯带给了更大的互动性,人们在交流彼此的看法、意见时,发现采用你来我往的方式达到的效果最为明显。
这就体现了互动性。
通过使用及时通讯系统,大家不需要离开电脑,不需要借助其它额外的工具,就可以在线实时地交流工作。
1.2即时通信的概念和特点
即时通讯(IM)是一个允许两人或多人使用网络即时地传递文字信息、档案、语音与视频交流的终端服务。
即时通讯不同于e-mail在于它的交谈是即时的。
【1】大部分的即时通讯服务提供了presenceawareness的特性──显示联络人名单,联络人是否在在线与能否与联络人交谈。
在早期的即时通讯程序中,使用者输入的每一个字符都会即时显示在双方的银幕,且每一个字符的删除与修改都会即时的反应在银幕上。
这种模式比起使用e-mail更像是电话交谈,充分体现了其实时特性。
在现在的即时通讯程序中,为了画面的完整美观和交流方便,交谈中的另一方通常只会在本地端按下送出键(Enter或是Ctrl+Enter)后才会看到信息。
1.3即时聊天系统的发展
二十世纪七十年代早期,一种较早的即时通讯形式是柏拉图系统(PLATOsystem)。
八十年代,UNIX/Linux的交谈即时信息被广泛的使用于工程师与学术界,九十年代即时通讯更可跨越了操作系统平台交流,1996年11月,首个广泛被非UNIX/Linux使用者用于因特网的即时通讯软件ICQ出现。
通常认为ICQ是现在流行使用的即时通讯软件的开山之作。
ICQ源于以色列特拉维夫的Mirabils公司。
该公司成立于1996年7月,也就是在这个时候,四个月后的1996年11月,互联网上最出名,下载使用人数最多的免费软件ICQ诞生了,她是由几个以色列的年轻人制作的,在无人投资的情况下,他们向全球互联网用户提供免费下载使用,到了1998年,Mirabilis公司的ICQ用户已经发展到1200万人,并以每月100万用户的速度增加。
这时候,ICQ公司由于其潜在的巨大商业广告价值,已经成为许多大公司争相购买的对象,1998年ICQ公司将自己开发的软件连同用户一起“卖”给了美国在线(AOL),售价2.87亿美元。
据美国在线1999年底称,ICQ使用者已达5000万,其中超过三分之二的使用者居住在美国本土以外的世界各地。
ICQ造就的实时通信成了互联网世界中发展最快的一个领域。
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模式。
2.3Hibernate框架简介
Hibernate是一种Java语言下的对象关系映射解决方案。
它是一种自由、开源的软件。
它用来把对象模型表示的对象映射到基于SQL的关系模型结构中去,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。
主要作用有:
Hibernate不仅管理Java类到数据库表的映射(包括从Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
【4】它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。
无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate。
在应用方面,Hibernate对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,它既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
最具革命意义的是,Hibernate可以在应用EJB(EnterpriseJavaBeans是Java应用于企业计算的框架)的J2EE架构中取代CMP,完成数据持久化的重任。
3系统需求分析
前面两章介绍了课题的选题背景和相关的技术基础和协议。
在本章中将讨论一下即时通讯系统的需求分析。
3.1即时聊天消息的一般需求
3.1.1一般即时消息格式需求
(1)所有实体必须至少使用一种消息格式;
(2)一般即时消息格式必须定义发信者和即时收件箱的标识;
(3)一般即时消息格式必须包含一个让接收者可以回消息的地址;
(4)一般即时信息格式必须允许对信息有效负载的编码和鉴别(非ASCII内容);
(5)必须提供扩展和注册即时消息格式的模式的机制。
3.1.2可靠性需求
协议必须存在机制,保证即时消息成功投递或者投递失败的时候,发信者获得足够的信息。
3.1.3性能需求
(1)即时消息的传输必须足够的迅速;
(2)即时消息的内容必须足够丰富;
(3)即时消息的长度尽量足够的长。
3.2即时消息的协议需求
协议是一系列的步骤,它包括双方或者多方,设计它的目的是要完成一项任务。
即时通讯协议,参与的双方或者多方是即时通讯的实体。
协议必须是双方或者多方参与的,一方单独完成的就不算协议。
这样在协议动作的过程中,双方必须交换信息,包括控制信息、状态信息等等。
这些信息的格式必须是协议参与方同意并且遵循的。
好的协议要求清楚、完整,每一步都必须有明确的定义,并且不会引起误解;对每种可能的情况必须规定具体的动作。
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中的hibernate框架技术进行存储。
在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,在本系统中,用户表信息可以用Xml代码实现。
用户表(user)
表1用户信息表
名称
字段名称
类别
主键
非空
用户编号
id
数字
是
是
登录名
CustName
文本
否
是
登录密码
CustPassword
文本
否
是
年龄
Age
文本
否
是
性别
Sex
文本
否
是
电子邮箱
文本
否
是
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服务器启动界面
现就其中一些核心代码进行讲解。
publicclassAppServerextendsThread{}
其中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值为空后,循环才结束。
Connectioncon表示连接用户信息。
Catch是对java中的异常进行捕获,并且能够抛出异常,便于程序能够正常运行。
5.1.2登录验证模块
系统的登录模块是比较重要的,这是用户的一个身份验证,是通讯系统必须的一个功能模块。
如果客户端输入的字符串表方式需要登录,那么服务器在接收到该信息后连接数据库,准备从数据库选择昵称和密码。
服务器接收到客户端发送过来的号码和密码信息后,设定数据库查寻条件,并执行数据库查寻,通过比较输入的用户名和密码数据库信息来却请用户的登录是否成功。
以下为登陆验证的流程图。
图5用户登录流程图
5.1.3注册处理模块
新建用户是即时通讯工具的一个基本功能。
用户新建过程也在线程监听函数run()中。
新建用户的过程是这样的:
首先使用Register_Customer()方法加载数据库驱动类;然后使用dao.getUser()方法获取数据;在获取注册名时,进行判断,查看用户名是否重复,如果重复,则向客户端弹出提示信息,见图6;如果不重复,服务器接收客户端用户发送的昵称、密码、用户E-mail等信息,执行数据库添加操作完成用户的创建;最后向用户反馈注册成功信息。
图6注册名重复提示信息
5.2客户端的设计与实现
前一章介绍了服务器端的设计与实现,对于C/S模式的系统而言,还必须对系统的客户端进行设计和实现。
下面就来解决这样一个问题。
客户端通过Socket与服务器建立连接。
服务器与客户都通过构造BufferedReader、PrintWriter来建立输入流和输出流,双方通过该输入流和输出流来相互传递信息。
只要收到客户端的连接请求,服务器利用accept()函数返回一个新建的Socket对象,随后客户端向服务器发送消息,诸如注册、登录和查找同事等请求,服务器收到请求后,针对不同的消息处理请求。
5.2.1用户注册模块
当用户向服务器端发出注册请求后,客户端将向服务器发送客户传递的信息,诸如客户的昵称、性别、个人资料等信息。
等服务器接收完毕后,服务器会通过hibernate框架读取数据库信息,并进行判断,最后在客户端收到服务器的反馈信息。
现对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 即时 聊天 软件 开发 实现