Java聊天室系统的设计与实现【源码+文档】
目 录
摘要
Abstract
目 录
1 引言
2 网络聊天室的简介
2.1网络聊天室现状和发展
3 完成网络聊天室的技术以及环境 4
3.1 Java的介绍 4
3.2 Java的特点 4
3.3 TCP/IP协议的知识 5
3.4 Socket的介绍 6
3.5 开发工具 6
4 网络聊天室系统的设计 7
4.1项目概述 7
4.2 网络聊天室系统的设计 7
5 系统详细设计 8
5.1 服务器模块的设计 8
5.2 客户端模块的设计 8
6 系统测试 9
6.1 单元测试 9
6.2 系统测试 9
7 总结 10
参考文献 11
致谢 12
1 引 言
随着社会的发展和互联网技术的发展,普通老百姓也能够拥有属于自己的计算机,在平常的生活中也离不开了网络技术的支持,而替代了电话和写信的网上即时聊天成为了人们十分常见的沟通方式。
本软件是采用sun公司开发提供的java语言制作的,是基于C/S模型的网上聊天室。这个系统分为两个部分,服务端和客户端。服务端的工作主要是来监听和接收来自客户端的请求,然后处理客户端发来的消息,并通知客户端。而客户端的功能是能够让新用户注册,通过用户名密码登陆并且使用该系统。通过服务端和客户端的协同工作最终使用户能够使用网络聊天室,在聊天室中完成用户和用户之间的沟通。
2 网络聊天室简介
当今社会,能够实现即时通讯的软件使用频率是十分恐怖的,网络聊天室作为它的一种,使用人数也是相当可观的。国内处于垄断的QQ,业界老大哥微软的MSN都是大众关注和使用的焦点,普通老百姓也能够拥有属于自己的计算机,在平常的生活中也离不开了网络技术的支持,它是人们的生活变得十分的便利和高效,你能在网上找到自己想要的信息和有共同兴趣爱好的朋友。而且,现在很多的软件还有多人聊天,电子会议等一系列功能。
网上即时聊天室是广泛使用的一种技术,它的简单方便的沟通方式能够被广大的网上用户所使用。在当今社会,网上聊天是互联网服务重要的一环,有大约43%的用户都会使用网上聊天,是排在第四位。但是有很多人认为网络聊天室就是一种用来娱乐和打发时间的方式,而缺少了实际的价值。就目前来说,能够完成收入的网络聊天室其实并不多。它应该怎么实现自己的商业价值外界并没有过多的关注。
现在,很多企业都会开发属于自己的聊天室,用户通过该网站注册的用户名以及密码登陆到企业的服务器上。在聊天室中,用户之间可以通过输入文字以及各种符号来表达自己的想法,来达到互相之间的沟通。目前,开发一个供用户使用的网络聊天室的技术门槛并不是很高,也不需要大量的资金,国家对于这方面的管制和政策也没有太限制,所以当今社会上聊天室的竞争其实是很激烈的,腾讯,网易,新浪都有属于自己的网络聊天室,但是用户的集中度并不是很好,各家大型网站的网络聊天室都会有自己的忠实用户,彼此之间还没有很明显的差别,各自有各自的优势。
根据某个组织调查公布的中国目前互联网发展报告,目前网络聊天室在商业方面不被看好主要有几点,一:喜爱在网上聊天的人大部分在17~23的年龄之间,他们还没有完全独立,经济上并不是很富裕。二:大部分的网络聊天室的付费内容其实并不多,而且不是强制性的。
很多网站目前将收入目标定位已经参加工作收入较高的白领人士,而对于尚在学校以及初入社会的青少年并没有过多的注意。但是,就目前社会的发展情况来看,青少年的消费能力其实是十分可观的,他们并不想原先社会那样经济十分的拘谨,而是当今的父母都会尽量满足自己子女的需求,无论是经济上还是其他方面。所以,针对性的在网络聊天室加入一些青少年感兴趣的付费内容其实是十分必要的,它能够带来难以想象的收益。现在很多的商家对新型的广告形式并不是很了解,传统广告影响了它们在互联网领域的思考,另一个方面是网络聊天室自身的广告模式不当。就现阶段的情况来看,网络聊天室也要进行转变,不单单是提供即时聊天的服务,而是应该更加多元化,专业化的发展。一方面继续发展自己的优势,将即时聊天做的更加方便,快捷,能够满足不同年龄,不同职业,不同需求的用户。另一方面可以提供用户一些不同于聊天的其他服务,例如近几年十分火的线上课堂,能够让用户足不出户就能学习到不同专业方面的知识,这样的话,收取一部分的费用对于用户来说也是能够接受的。从这几方面来说网络聊天室的商业实力是十分恐怖的。
3网络聊天室的技术以及环境
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程[1]。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点[2]。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等[3]。
java在推出时就是完全开源的,全世界的开发者都能够自定义许多自己的内容,没有什么局限性,就是这样一种特点,java的发展得到了迅速的提升。全球无数的开发人员都在不断完善着这一技术,你可以在各种技术的论坛上看到各种技术大神的分享,其中很大一部分都是十分实用的。现阶段,全球大部分的企业都会选择java作为开发语言,比如金融,银行等。从推出到现在,java已然成为一种十分成熟可靠的产品。
3.2 Java的特点
1. 跨平台性
java在设计的时候就被设计成一种不会受到计算机限制的语言,计算机的硬件以及操作系统等都不会影响到java软件的运行,这是许多软件开发人员和互联网企业追求的发展方向,为什么这么说,因为计算机的快速发展,世界上计算机的种类已经到了难以想象的地步,操作系统也是如此,如果一种语言只是针对某个特定的计算机以及操作系统的话,那么软件的适用性将是很低的,这对于互联网软件这种方便,高效的特点是十分违和的。软件是不能够完全依赖设备的。java自己的虚拟机很好的避免了这一限制,java源代码编译后产生的二进制文件并不是让计算机去运行的,这些二进制的字节码文件是能够被java自带的虚拟机识别出来的,说到底,java虚拟机提供了一个独特的运行环境,才能够让java在不同的环境下运行。这就是java有跨平台的特点。
2. 面向对象
和传统的面向过程不同,java是一种面向对象的语言,所谓的面向对象就是一切的物体在java中都可以被描述成对象,对象会拥有属性和方法。一般来说对象的特点或者性质会被定义为属性,它用来描述对象。而对象的一系列行为会被定义为方法,比如说动物会跑会叫,这些都会被定义为方法,java可以通过操作对象的具体方法让对象完成不同的动作。java充分发挥了这种编程的思想,有很高的代码扩展和复用的特点。
3. 安全性
java中使用的都是完成的对象作为数据结构,这些对象的安全可以通过权限控制以及封装来完成。java的源代码在进行编译的时候都会经过java语言自身的规定的检查,保证了代码中的变量在编译完成后都能产生对应的具体的java类。在运行java的时候也会使用类加载器进行载入,并且还有有字节码的校验,只有通过了这些校验java虚拟机才会正确的运行程序,以上就是java的四种安全保证。在网络上的使用java也提供了权限控制的机制,能够保证网络上访问用户的安全。
4. 多线程
多线程的理念已经在很多地方有了实际的应用,最明显的就是操作系统方面,我们在操作电脑时能够同时打开不同的程序以及进程,这就是多线程的应用,它能够让一个运行程序中同时有多个线程,这种程序中多线程的理念能够处理并发以及多任务的处理。java中有内置的一些多线程技术以及还有很多事先准备好的类用来供用户使用和管理自定义的多线程。
- 简单易用
java的源代码能够使用各种不同的编辑软件来编辑,并不会需要特殊的环境。例如市面上的文本编辑器,记事本以及专业的IDE都能够用来编辑java源代码,只需要把编辑好的源代码编译一下,在使用jvm这种java的虚拟机运行就可以了。通过各种测试以及修改,就可以得到用户想要的程序了。
3.3 TCP/IP协议的知识
TCP/IP说白了就是网络中的一种协议,协议是组成互联网的基础,它是由TCP(传输层)协议和IP(网络层)协议共同组成的。这个协议规定了电子器件如何接入互联网,以及它们之间数据的传输应该使用什么样的方式的一种标准。在协议中,上一层协议会调用对应的下一层协议来完成需求。换句话说,如果数据传输有问题,要通知机器重新传输的就是TCP协议负责的事情,直到要传输的数据能够成功的到达指定的机器上。而给互联网中每一个设备分配一个特殊的标识的就是IP协议的作用了。
3.4 Socket的介绍
java中被称为“套接字”就是socket通信技术[1],它能够描述一个计算机IP的地址以及端口。socket能够通过java程序向互联网发出请求和处理网络发过来的请求。在建立双方网络连接的时候会使用到socket套接字。当网络成功建立连接后双方都会有一个socket的实例被建立,通过使用和操作这个实例,就能够完成各种需求,对双方的连接来说,客户端和服务端并没有什么差别socket是平等的,它们都是通过socket的实现类和它的子类来完成的。
Java socket通信开发原理:socket分为服务端和客户端两部分,服务端主要是可以监听一个特殊的端口,它能够监听并且捕获的向这个特定的端口发出的请求,这个请求就是由客户端来发起的。当连接建立之后会产生会话,完成会话之后关闭连接。而客户端主要是发起请求,它能够向某一个特定的服务器上的一个特殊的端口发起请求,然后建立连接处理会话,会话完成后和服务端一样关闭socket。客户端并不用像服务器一样规定一个特殊的打开的端口,系统会自动分配一个能够使用的端口。
3.5 开发工具
我使用的是Eclipse作为开发工具,Eclipse开发平台是开源的可以基于java进行扩展的。就它本身来说,只是集合了各种服务和框架,用户可以添加各种各样的插件和组件来不断扩展。Eclipse不但是一个免费的软件,而且它还支持各种的java标准,这些特点能够极大的缩短开发的周期也让它成为了广大程序员最常用的开发工具之一。
Eclipse支持用户自定义工程,能够创建编辑文件,还能够完成编译,运行等一系列java的工作。使用Eclipse开发能够实现高效并且快速。主要特点如下:开放的,扩展性很好的IDE、强大的插件功能、成功的图形界面。
4 网络聊天室系统的设计
4.1 项目概述
我自己的这个聊天室目前来说还是十分的简单,和市面上那些已经成熟的网络聊天室相比还是差别很大的,但是基本的聊天功能也是能够使用的,整个界面简洁,使用起来也十分方便。
4.2 网络聊天室系统的设计
5 系统详细设计
5.1 服务器模块设计
服务端的功能主要如下:
一:能够开启和关闭服务器。
二:等待着客户端从特殊端口发送的请求。
三:监听的端口并不是固定的,服务端的端口是能够自定义的。
四:能够广播消息向所有连接到服务器的用户。
客户端和服务器之间通过socket套接字进行连接,socket的使用在java当中并不复杂,十分的简单。API提供了一个专门的类来处理,让编写程序变得十分简单。多线程的技术在服务器端得到了充分的体现,服务器能够同时处理来自不同IP的客户端的请求。通过循环调用serversocket对象的方法来监听是否有来自客户端的请求。
5.2 客户端模块设计
客户端的功能主要如下:
一:能够和服务端进行连接。
二:新的用户能够注册账号。
三:通过用户名以及密码完成用户的登陆,连接到聊天室。
四:用户能够在聊天室发送消息。
客户端通过socket与服务器建立连接。通过java对象的流来进行信息的传递,服务器接受请求返回对象,然后返回给客户端信息。不同的客户端的信息在服务端能够进行不同的处理。
6 系统测试
6.1 单元测试
一般来说,在软件的开发中,每当一个基本功能能够实现之后会由程序员先进行测试。一般来说要根据实际的情况来看这个功能是否完整,要验证接口的设计是否和设计书上面的一直。这就是基本的单元测试。单元测试并不是光测试接口的功能就可以了,程序员应该对测试结果进行预计的评估,看实际的结果和预计的结果是否相同,还有对可能发生的所有错误进行测试和处理。单元测试总的来说就是要测试最小的功能模块,与程序其他部分隔离的情况下进行测试,保证最低级的功能没有问题。
6.2 系统测试
系统测试就是对软件的全面的测试,主要是为了测试各个模块之间的数据的通行以及整个软件的运行是否达到了用户的要求。而且要求具体的测试报告来评判软件的好坏。系统测试不应该仅仅测试软件,而是要软硬件结合一起进行测试,需要专业的测试人员根据实际的用户需求制定有效的测试计划才行。而且系统测试不应该在软件项目的最后进行,应当在软件开发过程中周期性的进行。
7 总结
这个项目实现了基本的即时聊天的功能,经过很久的测试以及各种各样的纠错解决了很大部分的问题。但是,世界上没有一个程序是十全十美的,每一个计算机的软件都会有各种各样的不足,特别是我们这种没有经过长时间的维护和测试的个人设计的软件。就算是当今使用频率范围都非常大的window系统也会经常爆出各种的漏洞以及错误。这个系统对于我这个初步接触软件设计以及编程的学生来说,在初期是十分困难的,感觉逻辑方面很是复杂,难以控制,所以直到现在还是有许多的缺点和想实现但是现在还没有实现的一些功能,有时间的时候我还是会逐步的完善他们,希望能做成一个能够实际使用的聊天系统。
通过这次毕业设计获得的宝贵经验,通过这次的软件的开发,我对C/S模型有了一个从一知半解到现在稍微入门的进步,我相信这个模型我现在认识的仍热不够,在以后的工作和学习中要努力完善自己在各个软件领域的知识。还有通过我在企业的实习以及毕业设计的开发,我对于多线程的使用得到了极大的提升,以及在如何进行网络编程方面有了很好的了解。
通过实际的设计一个程序,以及我在公司里做后台的开发,我了解了做好一个软件的困难。虽然在大学的时候做过一些课程设计,但是那些相比这个来说还是十分简单的,而且会有老师的指导和帮助。所以在制作的初期还是十分的棘手,通过各种各样的测试以及修改,还是完成了这个设计我还想说一些我在公司实习的一些感想,我目前是在一所创业公司担任程序员。和一些大的公司相比,创业公司的产品变化十分的频繁,而且我们公司崇尚的是敏捷开发,迅速的迭代。我经常今天写的程序到了明天就会因为需求以及效果的问题作出改变,这对于我们这种编程人员是十分疲劳的。特别是我现在在一个新的部门独自承担后台的开发工作,在原来的部门会有一个师傅带了我,我感觉还是能应付的过来的。但是,现在只有我一个人,而且我还要做关于服务器运维方面的工作,我感觉到自己在
某些方面还是欠缺的很多,比如原来的重心都集中在编程方面,现在接手了运维的工作后才发现运维并不是我想象中的那么轻松,各种服务器的问题以及配置是十分麻烦的。这给我敲响了一个警钟,自己应该学习各种不同的知识来应对以后可能发生的各种问题。
参 考 文 献
[1] 胡伏湘 雷军环JAVA程序设计实用教程 编著 清华大学出版社
[2] 张思民 Java开发技术与工程实践 清华大学出版社
[3] 陈轶.姚晓昆编著.Java程序设计实验指导.北京:清华大学出版社,2006
[4] 杨昭编著.二级Java语言程序设计教程.北京:中国水利水电出版社,2006
[5] 赵文靖编著.Java程序设计基础与上机指导.北京:清华大学出版社,2006
[6] 王路群.Java高级程序设计.北京:中国水利水电出版社,2006
[7] 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社,2006
[8] 柳西玲.许斌编著.Java语言使用开发基础.北京:清华大学出版社,2006
[9] 施霞萍等编著.Java程序设计教程 第2版.北京:机械工业出版社,2006.
[10] 宛延闿等编著.实用Java程序设计教程.北京:机械工业出版社,2006.
[11] 陈国君等编著.Java2程序设计基础.北京:清华大学出版社,2006
[12] 郑莉.王行言.马素霞编著.Java语言程序设计.北京:清华大学出版,2006
[13] 丁振凡主编.Java语言实用教程.北京:北京邮电大学出版社,2005
[14] 朱喜福等编.Java程序设计.北京:人民邮电出版社,2005
[15] 参考新浪网络聊天室、 腾讯网络聊天室等
致 谢
紧张而忙碌的毕业设计就要结束了,在完成了系统的功能设计后,我感到由衷的喜悦和自豪。在我做毕业设计期间,许多老师,同学和朋友给我我无私的关怀和帮助。在此,我要向他们表示衷心的感谢。
首先,我要感谢学校的老师在毕业设计期间给了我悉心的关怀与帮助,并且给了我许多关键的,建设性的指导。这次的毕业设计让我受益匪浅。能够这样说,用计算机来解决繁重而低效的手工管理工作,计算机发展史上的必然。在理论课的学习中,我掌握了基础课和专业课的理论知识,也曾经做过一些小的程序设计,但真正动手设计一个这种聊天类的软件,还是第一次。在这次的毕业设计中,我曾遇到了许多困难,而在克服这些困难的过程中,我的各方面的能力又有了很大的提高,使我的理论知识更好的与实践相结合,增强了专业技能的可实践性。从调研,需求分析到查找资料,结构设计,详细设计以及调试程序。我终于设计出了一个相对完整的,周密的,可使用的聊天系统。通过这次的毕业设计,我真正理解了软件工程设计的整个过程,既巩固了以前的理论知识,也为我以后的工作奠定了良好的基础。当然,因为时间的短促,我所完成的系统并不是尽善尽美的,还有待进一步的修改和完善。最后,请允许我再一次向毕业期间无私帮助过我的老师,同学和朋友表示最衷心的感谢。