基于CS结构的即时通信系统的设计与实现毕业设计.docx
《基于CS结构的即时通信系统的设计与实现毕业设计.docx》由会员分享,可在线阅读,更多相关《基于CS结构的即时通信系统的设计与实现毕业设计.docx(66页珍藏版)》请在冰点文库上搜索。
基于CS结构的即时通信系统的设计与实现毕业设计
基于CS结构的即时通信系统的设计与实现毕业设计
1绪论
1.1即时通倍系统概述和选题背景
即时通信(InstantMessaging,缩写为IM),是以万维网为基础,实现通信双方语言、文件、语音等实时信息传送的通信过程[1]。
与Email等传统的通信方式相比,即时通信具有实时、方便、快捷、廉价、交互性好等优点。
当今社会是一个信息化的社会,个人化的交流要求越来越高。
同时,随着多媒体计算机技术和通信技术的迅猛发展,人们已经不能满足于简单的话音和文字通信,希望集语音、文字和图像于一体的多媒体通信[2-4]。
即时通信技术自从1996年诞生以来,经历了10余年的发展,已经从最初的简单的文字聊天通信工具,发展成为一个集通信和娱乐统一于一体的广泛平台。
在这个平台上,除了可以进行最基本的实时通信(包括文字通信,还有视频通信和语音通信)之外,还可以进行游戏的娱乐项目,甚至可以进入一个虚拟的世界、一个虚拟的现实。
现在著名的即时通信软件有QQ,GoogleTalk,YahooMessager,微信,飞信,Line,Skype等,这些即时通信系统在提供即时通信基本功能的基础上,各自有自己的特点。
如飞信可以免费发送短信到好友的手机;Googletalk的聊天记录是以邮件的形式保存在Googlemail的邮箱里面[5]。
而且除了实现PC与PC、手机与手机的通讯之外,还可以实现手机与PC之间的通信。
但是这些优秀的即时通讯软件的使用必须有一个前提条件:
必须保证因特网的畅通。
如果因特网不畅通,那么这些软件都不能正常的使用,而且很多的即时通讯软件只能在Windows平台下运行,不能在Linux、MacOS上跨平台运行,除了个别的几个工具之外,也不能再移动平台上运行。
随着时代的发展,互联网时代的到来,人们的沟通交流方式也变得越来越丰富,如Email、BBS、即时通讯软件、微博、移动终端等。
但是就在个人通信方式方兴未艾的时候,企事业内部交流通信却显得比较的尴尬,很多的企事业单位内部之间的工作沟通使用的市场上现有的个人即时通讯工具,部门同事之间相互加为好友,部门与部门之间建立一个又一个的群,这种方式貌似很方便同事之间的工作沟通。
本人的QQ就加入了十几个群,个人的各种好友有近百人,我的同学中有的加入几十个群,各种好友有数百人之多。
每天一打开通信软件,就会弹出各个群的信息,很多好友的信息,每天的交流沟通占去了很多很多的时间,工作效率低下。
发出一款能在企事业单位内部使用的、进行工作沟通交流的即时通讯软件,使得我们能在上班的时候免受工作之外的各种信息的干扰,提高我们的沟通质量,提升人们的沟通体验,就显得非常必要。
而且人们也越来越关注一个问题,那就是安全保密。
如何能在因特网不畅通的时候进行实时通信,如何保证个人信息的安全性,如何保证企业单位内部信息安全性,如何使得软件能够跨平台(不仅是PC平台之间,也包括PC和移动终端之间)使用,正是本论文的研究所在。
1.2选题的目的和研究意义
现代社会的信息越来越发达,生活节奏也越来越快,于是新型的省时,省力而又高速便捷美观的即时通讯工具迅速发展起来。
例如手机即时通讯和PC即时通讯,手机即时通讯的代表就是短信;而网站、视频即时通讯有:
米聊、YY语音、QQ、MSN、XXhi、新浪UC、阿里旺旺、网易泡泡、网易CC、盛大ET、移动飞信、企业飞信等应用形式。
尽管有这么多的通讯形式,但并不是都很完美,每种形式各有优劣。
所以期待能用Java语言编程改善和解决一些问题,进一步提升即时通讯的功用。
在信息化时代,作为人们使用最多的,与日常生活最为密切的即时通讯工具,就成了人与人之间进行信息交流,感情传递的主要方式。
然而,以传统的QQ为代表的即时通讯工具过多的侧重于娱乐性,不能够适用于高效严谨的办公环境,它不仅影响员工的工作效率,而且使得企业的内部的资源信息存在着较大的安全隐患。
因此,开发出一款能够适应办公环境,企业急需,方便高效的,又安全可靠的即时通讯工具就显得比较的紧迫,比较具有现实意义。
通过研究开发出一款适合于企事业单位使用的即时通讯软件。
本系统具有如下的特点:
(1)由于减少了工作之外的因素的干扰,工作效率大大的提高,沟通体验得到了提升。
(2)能够很快捷方便的获知对方是否在线。
(3)由于交流通信使用的内部的即时通讯软件,所以能够很好的保护信息的安全。
(4)系统应用之后,使得沟通的渠道通畅,交流实现扁平化,避免了过去传达汇报的传统交流沟通方式,使得沟通交流更加的有效。
(5)由于采用C/S架构,所有的信息都是通过服务器转发,很方便的查询历史记录。
本系统釆用模块化程序设计,系统具有良好可扩充性,可以在后续的开发中添加移动通信模块、电子邮件模块和视频通信模块,为系统的继续完善奠定了良好的基础。
1.3本论文的研究方法
本文的设计目标是一个实用的面向企业的局域网即时通讯软件。
首先对系统的可行性进行分析,确定了系统开发可行。
然后经过需求分析确定了系统最终要实现的功能,确定了本系统所使用的后台数据库系统为MySQL,并对系统中的数据库进行了设计。
系统釆用目前最为流行的开发工具Java语言进行开发。
其中,网络通信部分采用流行的TCP/IP协议,程序采用典型的C/S(客户端/服务器)模式,这是传统的软件系统体系结构,能够将任务合理的分配的Client端(即客户端)和Server端(即服务器端),可以大大的降低系统的通讯开销,可以充分的利用C/S两端的硬件环境的优势。
程序采用的是使用Socket套接字进行网络通讯模块设计,界面部分采用Swing轻量级控件,能够是系统的控件在各个平台上具有完全相同的界面,达到了很好的互通性。
系统釆用模块化设计,釆用自顶向下的开发模式。
开发过程中先根据功能将系统划分成不同的模块,然后将各个模块继续细化,划分成更小的子模块。
模块化的好处是便于开发,便于调试,便于系统的后期维护,并为后续的开发预留接口,使得系统具有良好的可扩充性。
本文最终设计出一个简易而实用的网络即时通讯软件,模式又分为服务器和客户端两部分:
客户端通过输入服务器端的IP地址与服务器建立通信。
考虑到要可以在局域网中应用,本系统使用的是第二种方法,经过设置,在局域网或internet上都可以使用。
1.4本论文的内容
第一章绪论。
系统的介绍了课题的选题背景,课题研究的意义,所釆用的研究方法以及本论文的结构。
第二章主要内容介绍。
详细的介绍了本系统所涉及到的即时通信的原理。
包括即时通信系统的定义TCP/IP协议。
介绍了本系统所涉及的JAVA编程技术。
包括套接字编程,多线程编程技术,Swing轻量级图形用户界面开发,系统开发的C/S架构等。
介绍了数据库操作的MySQL语言。
第三章系统分析。
首先从技术可行性、经济可行性和操作可行性方面讨论了系统的可行性。
然后通过需求分析确定了系统所要实现的基本功能。
第四章系统设计。
确定了系统的总体框架,服务器端和客户端的详细功能和界面,并且确定了系统的数据库。
第五章系统实现。
重点介绍了系统的服务器端和客户端的实现。
最后是结语和致谢。
对整个发过程做出了全面的回顾,并系统的进一步改进和完善提出自己的意见。
2主要技术介绍
2.1开发环境介绍
2.1.1Java语言的产生与发展简介
Java是JamesGosling领导的Green小组在SunMicrosystems公司开发的,1995年更名为Java,并重新设计,用于开发Internet应用程序。
近年来,Java变得非常流行,显示出独特的魅力:
跨平台、动态的Web、Internet计算。
Java被广泛接受并推动了Web的迅速发展,同时Java技术也不断更新。
Java是一个由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface>简称API)构成的完整平台,有一个庞大的类库,其中包含很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾回收等服务的执行环境。
Java的内容体系主要有:
Java应用程序、Applet小应用程序、JSP/Servlet、JavaBean、EJB、JavaME、JavaEE等[6]。
迄今为止,Java语言已作为一门综合性技术在众多领域得到发展和应用。
2.1.2Java语言的主要特点
Java是面向对象的、简单的、分布式的、解释型的、健壮的、安全的、结构中立的、可移植的、高性能的、多线程的和动态的[7]。
(1)Java语言是面向对象的程序设计语言。
Java是一个纯粹面向对象的语言,强调的面向对象的特性,具备继承、封装及多态性,对软件工程技术能够提供很强的支持[8]。
为了简单起见,Java语言只支持类之间的单继承,但支持接口之间的多继承。
另外Java全面支持动态绑定。
(2)Java语言是简单的。
Java在设计的时候尽可能地接近C/C++,但是剔除了C++中很少使用的、难以理解的、易混淆的特性,如操作符重载、多继承、自动的强制类型转换。
特别地,Java语言不使用指针,并提供了自动垃圾回收机制[9]。
总之,Java语法好比C++语法的一个“纯净”版本。
Java简单性的另一方面是小。
(3)Java语言是分布式的。
从诞生起,Java就与网络联系在一起,它强调网络特性,内置TCP/IP、HTTP、FTP协议类库,Java应用程序能过通过URL打开和访问网络上的对象,其便利程度如同访问本地文件系统一样。
另外,Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
(4)Java语言是解释型的。
Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。
在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
(5)Java语言是健壮的。
Java通过强类型机制、异常处理、垃圾的自动收集等机制来保证Java程序的健壮性。
Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。
Java的安全检查机制使得Java更具健壮性。
(6)Java语言是安全的。
Java程序在语言定义阶段、字节码检查阶段及程序执行阶段进行的三级代码安全检查机制,对参数类型匹配、对象访问权限、内存回收、Java小应用程序的正确使用等都进行了严格的检查和控制,可以有效地防止非法代码的入侵,阻止对内存的越权访问,能够避免病毒的侵害。
(7)Java语言是体系结构中立的。
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),只要有Java运行时系统,这种字节码不仅可以很容易地在任何机器上被解释执行,而且还可以迅速地翻译成本地机器的代码。
(8)Java语言是可移植的。
与C/C++不同,Java规范中没有“依赖具体实现”的地方。
基本数据类型的大小以及有关算法都做了明确的说明。
Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSIC实现的。
(9)Java是高性能的。
Java采用JIT编译器(即时编译器),而即时编译器的基本工作方式是一次把字节码编译为本地代码,并将结果缓存起来,在需要的时候重新调用,由于这种方式只需要进行一次解释,从而极大地提高了常用代码的运行速度。
(10)Java语言是多线程的。
只要操作系统支持,Java中的线程就可以利用多个处理器。
在不同的机器上,只是调用多线程的代码完全相同,Java把多线程的实现交给了底层的操作系统或线程库来完成。
(11)Java语言是动态的。
Java执行代码是在运行时动态载入的。
在网络环境下,Java语言编写的代码用于客户端架构可减少维护工作。
另外,类库中增加的新方法和其他实例不会影响到原有程序的运行。
2.1.3Javaweb和struts2技术
采用B/S的结构实现服务器端,对用户和在线用户进行增删改查,和踢用户下线,以及开启服务器和关闭服务器。
客户端采用C/S结构,管理端采用B/S的结构,用Tomcat作为服务器,MySQL作为数据库,还使用到了WindowBuilder开源框架进行界面开发。
2.1.4MyEcIipse
MyEclipse企业级工作平台(MyEcIipseEnterpriseWorkbench,简称MyEcIipse)是对EclipseIDE的扩展,集成了从J2EE到各种轻量级的框架(Struts,Spring,Hibemate等等),有利于程序的一体化开发。
简单而言,MyEcIipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错,完整支持HTML,Stmts,JSF,CSS,Javascript,MySQL,Hibernate。
2.2Swing编程
javax.swing包在图形界面设计上比AWT更丰富,更美观。
Swing拥有4倍于AWT的用户界面组件,他是在AWT包的基础上的扩展。
本系统中大量使用了Swing组件编程。
本系统用到的Swing组件有面板(JPanel)、滚动窗口(JscrollPane)、选项板(JTabbedPane)、按钮(JButton)、组合框(JComboBox)、标签(JLabel)、表格(JTable)、文本域(JTextField)、文本区域(JTextArea)。
其中文本域(JTextField)是用来输入或显示字符串的Swing组件[12],文本区域(JTextArea)可以让用户输入多行文本的Swing组件[12]。
2.3多线程编程
多任务处理有两种截然不同的类型:
基于进程的和基于线程的。
进程是程序的一次动态执行,对应了从代码加载、执行至执行完毕的一个完整过程。
一个进程中既包括所要执行的指令,也包括执行指令所需的任何系统资源,如CPU、内存空间、I/O端口等,不同进程所占用的系统资源相对独立。
因此,基于进程的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。
线程是进程执行过程中产生的多条执行线索,是比进程更小的执行单位,必须栖身于某一进程之中,有进程触发执行。
基于进程的多任务处理的特点是一个程序可以同时执行两个或多个任务的功能。
多线程程序比多进程程序需要更少的系统开销。
在创建或撤销进程时,系统都要为之创建和回收进程控制块,分配或回收资源,如内存空间和I/O设备,系统所付出的开销明显大于创建或撤销时的开销。
在进程切换时,涉及到当前进程CPU环境的保存及新被调度运行进程的CPU环境的设置,而线程的切换则仅需保存和设置少量寄存器内容,不涉及存储管理方面的操作[8]。
因此线程间的切换也是低开销的。
Java支持内置多线程编程。
在本系统中,设置后台线程处理服务器和客户程序的通信。
服务器资源以轻量级的线程提供,和多个客户线程并发连接通信。
这样可以减轻服务器端的开销,同时保证了多个用户端连接能够得到快速而高效的服务[9]。
2.4MySQL数据库简介
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。
目前MySQL被广泛地应用在Internet上的中小型网站中。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
与其他的大型数据库例如Oracle、DB2、SQLServer等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQLCluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。
对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,MySQL是最佳的选择,而且由于MySQL是开放源代码的软件,因此,可以大大降低总体的拥有成本。
目前,在Internet上所流行的主要网站的构架方式是LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和LNMP(Linux+Nginx+MySQL+php/perl/Python),即使用Linux作为操作系统,Apache和Nginx作为Web服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。
由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。
2.5即时通讯系统原理
Java支持流套接字和数据报套接字。
流套接字(streamsocket)使用传输控制协议(TCP)进行数据传输,而数据报套接字使用用户数据报协议(UDP)[10]。
2.5.1套接字通信
网络程序设计通常涉及一个服务器和一个或多个客户端。
客户端向服务器发送请求,服务器响应请求。
客户端从尝试建立与服务器连接开始,服务器可能接受或拒绝连接。
一旦建立连接,客户端和服务器端就可以通过套接字进行通信。
套接字(Socket)是两个主机之间逻辑连接的端点,用来实现客户方和服务方的连接。
Java对套接字通信的处理非常类似于对输入输出操作的处理,因此,程序对套接字读写就像对文件中读写数据一样容易。
套接字分为服务器端套接字、客户端套接字。
首先创建一个服务器,这需要创建一个服务器套接字serversocket,在创建服务器套接字之后,服务器使用下列语句监听连接:
Socketsocket=ServerSocket.accept();
客户端执行下列语句请求与服务器进行连接:
Socketsocket=newSocket(serverName,port);
当服务器和客户端建立连接后就可以进行通信了。
由于本系统存在单个服务程序与多个客户程序通信的可能,所以服务程序要响应客户程序不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立,然而服务器程序和客户程序的会话可能很长,因此,为加快对客户程序连接请求的响应,比较好的解决方法是服务器主机运行一个后台线程,这个后台线程处理服务器和客户端程序的通信。
而客户端只要能够顺序处理服务器程序的响应就可以了,因此客户端程序通常不使用多线程。
2.5.2数据报通信
数据报是一种无连接的通信方式,它的速度比较快,但是由于不建立连接,不能保证所有数据都能到达目的地[6]。
所有一般用于传送非关键性的数据。
发送和接收数据报需要使用Java类库中的DatagramPacket类和DatagramSocket类。
2.6系统的主要架构
基于C/S的体系架构:
C/S架构,即Client/Server(客户机/服务器)结构,是传统的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。
客户端用于用户的注册、登录、通讯,而服务器端用来接收用户注册信息、验证登录信息以及转发用户之间相互通讯的信息。
B/S结构(Browser/Server结构)结构即浏览器和服务器结构。
它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。
在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。
这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。
它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。
特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、速度快、效果优。
2.7TCP/IP协议
TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议),是Internet最基本的协议、Internet国际互联网的基础,主要的组成部分是网络层的IP协议族和传输层的TCP协议族。
TCP/IP协议定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
协议采用了4层的层级结构:
网络接口层、网络层、传输层、应用层。
应用层
应用进程
应用进程
应用进程
应用进程
UDP
TCP
传输层
网络层
IGMP
IP
ICMP
ARP
RARP
网络接口层
网络接口
图2-1TCP/IP协议体系结构
网络接口层:
提供了TCP/IP与各种物理网络(局域网、广域网等)的接口,并为网络层提供服务。
网络层:
主要功能是管理Internet地址、路由选择、数据的分片和重组。
这一层解决了计算机之间的通信问题,该层的协议统称为IP协议。
传输层:
主要功能是为Internet提供可靠地传输控制,主要的协议包括TCP协议和UDP协议。
应用层:
提供各种应用服务,例如HTTP、SMTP、FTP等协议。
每一层都呼叫它的下一层所提供的协议来完成自己的需求。
通俗而言:
IP协议是给因特网上的每一台电脑提供一个IP地址,保证网络是畅通的,但是不能保证发送的数据都能到达指定的目标IP,即不能保证数据传输的可靠性[15]。
而TCP协议则解决了数据传输可靠性的问题。
它负责发现传输的问题,一旦发现传输过程中有数据包丢失就会发出信号,自动要求将丢失的数据重新传输,直到所有数据安全正确地传输到目的地,并且能够调整接收到的数据包,恢复数据到原来分片之前的顺序。
3即时通信系统分析
3.1系统基本功能描述
客户端可以实现注册,即时聊天,相互之间收发文件,发送截图,查看历史聊天记录等功能。
收发消息时,可以实现离线接收。
服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。
服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。
在后台管理系统,可以到对用户进行增删改查,查看在线用户,和踢用户下线。
3.2可行性分析
本系统的可行性分析包括以下几个方面的内容:
(1)技术可行性
使用Swing和socket技术,可以很轻松地开发出实用、简便、高效的基于网络的即时通讯系统。
因此技术上是可以实现的。
(2)经济可行性
计算机网络已经普及,因此在网络设备上不需要进行大的投入。
本系统需要一个MySQL数据库服务器,由于并发使用人数比较少,tomcat可以作为web服务器,所以成本很低。
(3)操作可行性
只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题。
如果要实现internet上通讯,只需要将服务器端运行在一个有固定IP的公网上就可以。
综上所述,即时Java即时通讯系统是可行的。
3.3系统需求分析
功能分析:
本系统要实现的功能如下:
(1)注册
服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别,籍贯,个人资料等,接受完毕后,便通过JDBC与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码。
客户收到服务器返回的信息后,便打开窗口登录。
(2)登录
在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JDBC读取数据库,然后与用户输入的信息进行比对,如果成功,便打开主程序窗口。
然后客户向服务器请求读