1、设计题目:基于java聊天室的设计与实现系部:电子信息系学生姓名:专业班级:学号:指导教师:-I-基于网络的聊天室系统的设计开发摘要信息时代的到来引发了一场知识和信息革命,计算机和现代网络技术的广泛应用极大地促进了社会经济的发展,同时也带来了一些新兴产业的发展,比如聊天室。聊天室已经慢慢成为人们生活的一部分,呈现出良好的势头和广阔的发展前景。本文主要介绍了以当前流行Web设计语言javaSocket技术语言开发的一个简单的网络聊天室。该小聊天室重要是为许多喜爱上网聊天的朋友开发设计的,希望能在现有的众多聊天室中给大家多一种的选择。和许多大型的网络聊天室相比该小聊天室比较简单,
5、networkschatroomsthissmallchatroomisquitetobesimple,butcanrealizethebasicfunctionwhichthedottedpairischattedmore,point-to-pointchats,transmissiondocumentandsoon.Thischatroommainlyconsistwithregisteringthepage,confirmingthepage,thechatroompage,leavingthepa
6、ge,theexaminationofchatingguestpage,helpingpageconstitutionandsoon.EntiredesignConcise,practicalandtheuseissimple.KEYWORDS:Websdesignlanguage,chatroom,javaSocket-32-III目录第一章绪论11.1聊天室系统的基本概念11.2开发聊天室系统的意义11.3本次毕业设计所要完成的主要工作2第二章课题介绍32.1课题的目的32.2课题的意义32.3课题的主要任务
7、4第三章系统开发环境与工具的选择53.1Java简介53.1.1Java语言53.1.2Java架构设计53.2本课题开发环境的选择63.3本课题开发工具的选择73.4本课题开发技术的选择8第四章需求分析94.1以往聊天室系统的缺陷94.2聊天室系统作为网络通讯工具的作用94.3现行聊天室系统的功能需求94.3.1用户注册104.3.2用户登入114.3.3私聊114.3.4聊天记录124.3.5系统消息124.3.6用户退出134.4质量性能需求144.4.1容错性需求144.4.2稳定性需求144.4.3软件
9、7.2美观界面35第八章结论36致谢37参考文献38-V-基于Java聊天室的设计与实现5第一章绪论1.1聊天室系统的基本概念聊天室系统是一个通过国际互联信息网络进行多人通讯的一个系统。该系统在一定网络通讯及高级语言程序设计和JSP应用程序设计的基础上,利用计算机通讯原理,形成一个聊天室平台,使得用户在进入这个聊天室系统平台的同时,可以通过网络在线与距离遥远的其他一位或多位用户进行信息交流。聊天室主要分为WebCha、tBBSChat两种。BBSChat是基于Telnet的Tcp协议,是BBS的附设功能,需要客户端Telnet程序。WebChat则采用浏览器方式
15、首先是要有一个完整稳定的服务器端,并且拥有多个客服端。客服端要具有实现用户注册和用户登入,在登入成功后,要显示出公聊界面,实现聊天功能并且能够发送表情和保存聊天内容和显示聊天记录等功能,在新用户上线和用户下线时要更新每个客户端在线用户列表名,并且可以和在线的用户实现一对一的私聊功能。在服务器端可以实现不断的监听客户的连接,并且根据客户端发送过来的不同信息,如注册信息、登入信息、公聊信息、私聊信息、退出信息等,服务器端要作出不同的响应,并且要实现数据库的操作,如根据用户注册的信息保存在数据库中,根据登入时发送来的用户名和密码检测是否合法用户等。2.3课题的主要任务主要涉及图形用户界面的开发、布
18、总称。用Java实现的HotJava浏览器(支持Javaapplet)显示了Java跨平台、动态的Web、Internet计算等一系列的魅力。从此Java被广泛接受并推动了Web的迅速发展。Java语言的语法与C语言和C+语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C+很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动强制类型转换。而且,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。Java语言是一个面向对象的、提供类和接口以及继承的原语,为了简单起见,只支持类之间的单继承,但
19、支持接口之间的多继承,并支持类与接口之间的实现机制。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口,它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket(实现客户端的套接字)、ServerSocket(实现服务器端的套接字)等。Java的强制型机制、异常处理、废料的自动收集等都是Java程序健壮性的重要保证。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java
21、块化原则:模块化是化解软件广度复杂的必然手段,模块化的目的就是让软件分工。接口分离原则:随着软件模块化的不断深入改进,面向接口编程而不是面向实现编程可以让复杂度日趋增高的软件降低模块之间的耦合度,从而让各模块更轻松改进。依赖倒置原则:随着软件结构的进一步发展,层与层之间、模块与模块之间的依赖逐渐加深,而层、模块的动态可插拔要求不端增大。当前最典型的三层次架构就架构在以上几项原则的基础之上,用数据库作存储层、用面向对象来实现业务层、用web作为用户接口层。这种三层次架构同样应用于此次系统的设计。3.2本课题开发环境的选择在进行开发之前,首先决定的第一个问题就是,该使用什么开发环境来编写该
22、系统以目前常用的开发语言来讲有C/C+、.NET技术,JAVA、VisualBasic几种。还有Eclipse,、BorlandJBuilder等,这些并不是程序语言,而是程序语言在建构程序时的“集成开发工具”,不过它们在开发设计的过程中也占有相当重要的角色,因为选用正确的集成开发工具,可以加速程序设计的进行、测试与排错,因而对整体进度具有决定性的影响。基于以下几点,选择JAVA语言开发技术。1)就执行平台而言,必须考虑的问题之一是用户可能使用的操作系统。用户可能使用的是WindowsLinux。JAVA语言具有平台无关性,可以不需要任何修改就可以运行在支持JAVA
23、的任何计算机上。2)JAVA的Swing组件开发技术可以开发丰富的图形界面,并且SwingAPI类提供了丰富的外部接口和方法,可以方便实现系统功能。3)就项目开发而言,纯粹的面向对象,加上数量巨大的类所提供的方法(函数)库的支持,使得利用Java开发各种应用程序,可以说是易如反掌。此外,在程序除错、修改、升级和增加新功能等方面,因其面向对象的特性,使得这些维护也变得非常容易。4)Java支持内在的多线程运行,提供分布式的并发机制,运行效率高。5)异常处理,为了使Java程式更稳定、更安全,Java引入了异常处理机制。能够在程序中产生异常情况的地方,执行相对应的处理,不
24、至于因突发或意外的错误造成执行中断或是死机。通过这种异常处理,不仅能够清晰地掌握整个程序执行的流程,也使得程序的设计更为严谨。6)高性能,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300,000个过程。翻译目标代码的速度与C/C+的性能没什么区别。7)网络功能,Java可以说是借助因特网而重获新生的,自然具备编写网络功能的程序。不论是一般因特网局域网的程序,如Socket、Email、基于Web服务器的Servlet、JSP程序,甚至连分布式网络程序,如CORB、ARMI等的支持也是非常丰富的,使用起来也很方便。8)源回收处理
25、,GarbageCollection是由JVM对内存实行动态管理的。程序需要多少内存、哪些程序的内存已经不使用了,需要释放归还给系统,这些烦琐危险的操作全部交由JVM去管理。让我们能够更专心地编写程序,而不需要担心内存的问题。内存的统一管理,对于跨平台也有相当大的帮助。3.3本课题开发工具的选择Java的开发工具很多,而且各有优缺点,Eclipse是一个开放可扩展的集成开发环境(IDE)。它不仅可以用于Java的开发,通过开发插件,它可以构建其他的开发工具。Eclipse是开放源代码的项目,并可以免费下载。支持最新的Java标准,并且缩短了开发周期。一直以其友好的集成开发
27、什么是socketsocket是一种用于表达两台机器之间连接“终端”的软件抽象。对于一个给定的连接,在每台机器上都有一个socket,你可以想象一个虚拟的"电缆"工作在两台机器之间,“电缆”插在两台机器的socket上。当然,物理硬件和两台机器之间的“电缆”这些连接装置都是未知的,抽象的所有目的就是为了让我们不必了解更多的细节。简单的说,一台计算机上的socket同另一台计算机通话创建一个通信信道,程序员可以用这个信道在两台机器之间发送数据。当你发送数据TCP/IP协议栈的每一层都给你的数据里添加适当的报头。有个好消息是java语言隐藏了所有这些细节
29、能看到用户ID而不能看到用户的个人形象,包括个人头像和个人服装SHO。W2)不能轻易分辨出自己谈话和别人的谈话。3)用户聊天只有单纯的文字表达,不能通过丰富的表情和图片来增添聊天的乐趣。4)聊天背景只有单纯的白色,没有任何可供选择的背景颜色和画面,使整个聊天环境显的呆板。4.2聊天室系统作为网络通讯工具的作用聊天室是提供给网民一个交友与娱乐的场所,在聊天室里网民可选择自己的聊天对象,与其进行对话交流,是网民之间相互沟通、交流情感的最佳方式之一。用户可以通过网络在线与距离遥远的其他一位或多位用户进行信息交流。在聊天室里网民可选择自己的聊天对象,进行对话交流。既可以一对一,又可以一对多,还可
30、以形成小组进行多对多讨论,方便网民在线私聊与群聊。是现行网络最流行、最被广泛应用的通讯工具。4.3现行聊天室系统的功能需求聊天室系统虽然满足了人们的在线通讯,但是随着聊天室被广泛应用,人们对于聊天的要求也越来越高,单纯的聊天已不能满足人们的需要,人们更需要多功能的聊天室系统,来丰富聊天环境。聊天室系统功能具体需求包括:1)一个聊天室里所有的人都可以互相密谈。2)可以通过用鼠标点击页面上出现的或者人名列表的人名来选择人名。3)可以使用颜色来轻易分辨出别人的谈话和自己的谈话。4)可以察看进入房间以后的所有聊天纪录。5)可以通过贴图在您聊天中加入卡通图片,使聊天内容丰富多采,充满活力。6
31、)可以根据您的自己喜好来设置背景颜色和画面,使您更加舒适的聊天。-13-154需求分析4.3.1用户注册需求描述:用户填写系统给出的注册项目,并提交给系统,成功注册后,系统生成用户所注册的登入ID,并保存在数据库当中。执行者:用户前置条件:无后置条件:无正常过程:1)向服务端发送注册请求2)服务端响应客户端,客户端弹出注册信息表单3)用户填写完表单后将注册数据传给服务端处理,并保存在数据库中4)返回客户端一个响应,显示用户注册的ID,提示注册成功异常过程(可选):用户填写表单的数据格式不正确或表单中存在空缺的项,客户端给予提示信息,并将光标定位到出错的地方。用户注册的项在数据
34、端断开连接,客户端提示信息发送失败。客户端发送的私聊内容包含不合法的字符特殊需求(可选):不能与不在线的用户进行私聊。图4-3私聊流程图4.3.4聊天记录需求描述:用户可以查询聊天的历史纪录,包括公聊记录和私聊记录。执行者:用户前置条件:用户正确登入后后置条件:无正常过程:1)发送、接收信息的同时将信息保存在本地文件中2)信息发送框中可以查询历史聊天记录3)从本地文件中读取信息,并显示在记录显示匡中异常过程(可选):服务端异常导致客户端退出,客户端提示服务器异常。客户端读取信息时目标文件不存在。4.3.5系统消息需求描述:在聊天室的每一个用户都能接收服务端发送的的信息提示消息执行
37、3软件设计可靠性要确定合适的模块粒度,各模块之间要求松耦合,高内聚;从而使整个系统的可靠性和稳定性得到提高,并且便于系统维护,和新模块的添加。4.4.4安全性安全性是防止网络方面的攻击。4.4.5扩展性系统建成后,应在现行系统上不需要做大的改动或不影响整个系统结构,就可以增加功能模块,这就必须在系统设计时留有接口,使其具有可扩展性和维护性。4.4.6易用性系统操作的界面必须简洁、操作方便易用、设计合理。-19-基于java聊天室的设计与实现15第五章聊天室系统的总体设计5.1聊天室结构分析本聊天室采用的是当前流行的Browser/Server(浏览器/服务器)结构,
41、天室执行流程图:5-45.2.1综合设计1)用于构建注册的主界面5-5注册的主界面publicvoidactionPerformed(ActionEventarg0)trysocket=newSocket(serverIP,serverPort);out=newPrintWriter(newOutputStreamWriter(socket.getOutputStream(),true);reader=newBufferedReader(newInputStreamReader(socket.getInputStream();out.println
45、ewString(thestr1).trim();if(!text2.equals(text3)label11.setText("密码不一致!");elselabel11.setText("");text4=textArea.getText();out.println("zhuce");Stringbb=null;trybb=reader.readLine();catch(IOExceptione1)e1.printStackTrace();315聊天室系统的总体设计5-9登陆成功界面privatevoid
46、getfrendinfo()Booleana=true;tryif(reader.readLine().equals("ok")ID=reader.readLine().trim();ID2=Integer.parseInt(ID);MyName=reader.readLine();Stringiconn=reader.readLine();Integer.parseInt(iconn);jb1.setText(MyName+"在线");jb1.setForeground(Color.red);userName=newArra
47、yList
49、);IP=InetAddress.getByName(IP11);Stringport1=reader.readLine();port=Integer.parseInt(port1);FriendName=reader.readLine();if(reader.readLine().equals("IPover")reader.close();out.close();if(!map.containsKey(IP)DatagramSocketsocket=newDatagramSocket();dilog=newdilog(socket,IP,MyName,Fri
51、arseInt(iconn);jb1.setText(MyName+"在线");jb1.setForeground(Color.red);userName=newArrayList
52、=reader.readLine();userName.add(FriendName);elsea=false;图5-12聊天界面3)发送系统消息服务器端收到用户上线或下线时发送给其他在线用户消息提示,并可以根据需要,主动发送消息给客户,实现服务器端的管理。5-13开启服务器Iterator
53、(str1.equals("getIP")out.println("ok");ID1=reader.readLine();System.out.println("获取的用户名aaaID是:"+ID1);ID=Integer.parseInt(ID1);out.println(dao.getIP(ID);System.out.println("获取的用户名aaaIP是:"+dao.getIP(ID);out.println(dao.getPort(ID