毕业论文JAVA聊天室的设计说明.docx
- 文档编号:11096693
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:38
- 大小:78.87KB
毕业论文JAVA聊天室的设计说明.docx
《毕业论文JAVA聊天室的设计说明.docx》由会员分享,可在线阅读,更多相关《毕业论文JAVA聊天室的设计说明.docx(38页珍藏版)》请在冰豆网上搜索。
毕业论文JAVA聊天室的设计说明
本科毕业论文(设计)
题目基于JAVA的聊天室设计与实现
基于JAVA的聊天室设计与实现
摘要
随着网络的快速发展,网络俨然已经成为了我们了解世界和关注世界各地新动态的一个主要途径了。
因此伴随着网络而必然产生的一些软件也越来越多,而能够实现即时通信的聊天软件也是随之诞生,且深受用户们喜爱。
而MSN,ICQ,还有国的等大型聊天软件也成为了人们网络生活中的一部分。
本文中主要阐述的是java聊天室的设计过程,以与聊天功能的实现。
前台采用的java语言采用C/S架构来设计聊天室,而后台则采用SQLServer2005创建的数据库和表格来管理用户的信息。
然后利用这2种工具的结合来完成聊天室的设计。
[关键词]网络聊天室即时通信JAVA
ChatroomDesignwithrealizationbasedonJAVA
Abstract
Withtherapiddevelopmentofnetwork,thenetworkhasbecomeinamajorwayforustounderstandtheworld.Sowiththenetworkandinevitablehassomesoftwareisalsomoreandmore,andcanrealizeinstantcommunicationchatsoftwareisalsocomesandlovedbyuses.SoMSN,ICQ,andotherlargechatsoftwarehasbecomeapartofthepeople’slifefornetwork.
ThisarticlemainlyelaboratedinthechatroomofthedesignprocessisJava,andtherealizationofthefunctionofchat.ThefrontdeskoftheJavalanguageusingC/Sarchitecturetodesignachatroom,andthebackdesk,usingthedatabaseandSQLServer2005createformtomanagecustomerinformation.Finally,usingthecombinationofthesetwotoolstocompletethedesignofthechatroom.
[Keywords]networkChatroomInstantcommunicationJAVA
绪论
随着互联网逐步普与,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见,最直接的网上交流的方式。
本系统利用Java实现基于C/S模式的聊天程序。
聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登录到服务端才可以实现正常的聊天功能。
服务器端的主要实现在特定端口上进行侦听,等待客户端连接;用户可以配置服务端的侦听端口,默认端口为9999;向已经连接到服务端的用户发送系统消息。
客户端的主要功能为:
连接到已经开启服务的服务端;用户可以配置要连接的端口号;用户可以配置连接后显示的用户的账号;当服务器端开启的话,用户可以随时登录,用户可以向所有人或某一个人发送消息。
从而客户与客户之间以与客户与服务器之间可以简单方便地进行通信。
主要使用Sun公司提供Java语言、jdk开发环境与套接字通信socket技术,并利用MyEclipse来进行开发,来是实现对服务器端和客户端之间相互交流的功能。
1课题总体介绍
1.1项目开发的目的
本课题的研究主要目的是可以加深我们对java编程思想的理解,让我们养成一个良好的项目开发的编程习惯,同时也是对我们所学的java编程的一个综合提高。
而对聊天室的开发也可以更好的理解C/S架构开发的原理,能够更加熟练的使用多线程、异常处理、Socket编程、输入输出流的使用。
1.2项目开发的意义
根据当前网络的需求,网络聊天越来越受各种网民所青睐。
因此开发网络聊天是相当有必要,而且在增加聊天功能,它不仅可以提高的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流。
而本人也学习过JAVA语言,对网络编程也较有兴趣,为了更好的考验自己对JAVA语言的掌握程度,本人就决定以《Java聊天室》为毕业设计,希望通过这一次能进一步提高本人的网络开发编程的能力。
2总体设计
2.1应用需求分析
利用Java实现基于C/S模式的聊天程序,聊天系统不外乎两个方面,服务器端和客户端。
服务器端程序主要负责侦听客户端发来的消息,客户端需登录到服务端才可以实现正常的聊天功能。
简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。
首先来看一下服务器端的任务:
服务器端的主要功能如下:
(1)在特定端口上进行侦听,等待客户端连接。
(2)用户可以配置服务端的侦听端口,默认端口为9999。
(3)向已经连接到服务端的用户发送系统消息。
(4)可以启动和关闭服务器。
以上就是服务器端最主要任务。
不难看出,服务器端的任务并不复杂。
客户端的主要功能如下:
(1)连接到已经开启服务的服务端。
(2)用户可以注册账号。
(3)用户可以通过注册好的账号登陆聊天室。
(4)用户可以向所有人或某一个人发送消息。
相对服务器而言,客户端的任务也不很复杂,有了以上的简单分析,可以知道,解决上述问题,即完成了该聊天系统的核心。
聊天室设计好了,同时还需要数据库的支持,数据库的功能就是对用户注册的账号和密码进行管理,当用户登录时可以进行验证。
2.2模块具体分析
模块分析示意图如图2.1所示:
图2.1模块分析
2.2.1服务器端模块分析
服务器与客户间通过套接口Socket(TCP)连接。
在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类.Socket,使得编写网络应用程序相对容易。
服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8888,然后无限循环调用accept()方法接受客户程序的连接。
2.2.2客户端模块分析
客户通过Socket(InetAddress,port)建立与服务器的连接。
服务器与客户都通过构造对象流来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。
客户端然后向服务器发送消息,服务器收到来自客户的请求后,针对不同的消息处理请求。
2.2.3数据库模块分析
数据库用于管理用户的信息,当用户在注册界面成功注册了账号,就存在数据库的用户表里面,当新用户注册时,将新账号与数据库中的账号比较来验证账号是否纯在,也可以验证账号密码是否正确。
2.3聊天室的具体实现
2.3.1登录界面的实现
登陆界面如图2.2所示:
图2.2聊天室的登陆界面
该界面用到了3个Jlabel,分别是“聊天室登录器”、“账号”、“密码”。
用到了1个JTextFilet,1个JpasswordField,和2个uttton(登录和注册)。
然后用网格包布局来管理这些控件。
当填写了正确的账号和密码后点击登录按钮可以进入聊天界面,错误则提示“用户名或密码错误”:
点击注册按钮则可以进入注册账号的界面。
2.3.2注册界面的实现
注册界面的实现如图2.3所示:
图2.3注册界面
该界面主要用的了4个Jlabel分别是4个填写文字的部分,然后一个JtextField和2个JpasswordField,用来填写要注册的账号和密码。
这些控件被放入第一个Jpanel中,然后放于Jframe的居中部分。
然后2个按钮放在了第二个jpanel中,放于jframe的南边。
2.3.3聊天界面的实现
聊天界面的实现如图2.4所示:
图2.4聊天界面
该界面的控件很少,用一个JtextArea来显示用户们的聊天容,该空间放在了居中部分。
然后是在南边有一个JtextField用来填写用户想说的话,然后点击唯一的utton(发送),就可以发送自己说的话了。
2.3.4服务器界面的实现
服务器界面的实现如图2.5所示:
图2.5服务器界面
该界面只用到了2个utton,用来启动和关闭服务器。
2.3.5服务器验证登录的实现
当用户点击了登录界面的登录按钮之后,用户填写的账号和密码会发送到服务器进行验证,如果账号密码正确,则向客户端发送登录成功的信息;如果账号密码不正确,则向客户端发送信息并以客户端为父窗口弹出子窗口提示说:
“账号或密码错误!
”。
2.3.6聊天功能的实现
用户在聊天界面点击发送按钮后,消息发送到服务器,服务器的消息进行分析,如果是私聊,分析出发送这和接收者后,将消息转发给接收者。
如果是发送给所有人,就遍历管理服务器连接所有人线程的hashmap,得到连接所有人的线程,将消息发送给所有人,而客户端则遍历管理所有人的聊天界面的hashmap,得到所有人的聊天界面,将消息发送到所有人的界面上。
3聊天室的详细设计
3.1开发环境的配置
JDK(JavaDevelopmentkit)是SUN公司提供的一套Java开发环境,通常称之为它主要包括了一些常用的JDK工具、执行时需要的函数库、与C连接时所需的文件与一些Java应用程序例等。
JDK可以从SUN公司的java.sun或国一些常用的资料下载免费下载而得。
下载完毕便可安装JDK。
在安装完JDK之后,必须配置环境变量classpath和path,JDK才能够正常运行。
①.在环境变量中新建名为classpath的环境变量(如已经存在则只要修改),值为:
E:
\ProgramFiles\Java\jdk1.6.0_10\lib
②.classpath指明Java虚拟机要装载类的路径,“.”表示当前目录
③.在环境变量中新建名为path的环境变量(如已经存在则只要修改),值为:
E:
\ProgramFiles\Java\jdk1.6.0_10\jre\bin
④.path指明了操作系统查找JDK工具如javac、java等文件的路径
Sun公司为程序开发者提供了编译、测试、执行程序等一套完备的工具体系,它们被集中存放在主目录的bin目录下。
3.2开发的过程
开发的过程不是盲目的,要有清晰的思路。
分好工作区,建好要用到的包,如:
界面就写在名为view的包里面,后台运行的类就写在model包里面等。
类视图1如图3.1所示:
图3.1类视图1
这是服务器端的开发,model层中的类是在后台运行的程序,view层中的类是服务器界面,启动服务器其实是调用的Server类,这个类才是真正的服务器。
而SerConClientThread类是服务器连接客户端的线程类,它的作用是接收客户端发来的消息并且转发出去。
ManageClientThread类是管理服务器连接客户端线程的类,这个类用HashMap将服务器连接客户端的所有线程管理了起来,方便调用。
同样在客户端的开发也是有良好的分层结构,如图3.2所示:
图3.2类视图2
其中view层是3个界面类,Chat是聊天界面类,ClientLogin是登陆界面类,Register是登陆界面类。
在这里我给大家介绍一下这些类得功能,在model层中的ClientConServer类是客户端第一次连接服务器要调用的类,也就是登陆时要调用的类,将登陆的信息发给服务器验证,同时创建一个连接服务器的线程。
而ClientUser类是客户端用户类,当用户点击登录是会调用这个类,然后由这个类调用ClientConServer类。
在tools层中,这里和之前服务器端的model基本上是一个原理,服务器端管理了服务器连接客户端的线程,这里也是用ManageClientConServerThread类来管理客户端连接服务器端的线程的类ClientConServerThread。
这里的客户端连接服务器的线程类ClientConServerThread是用来读取从服务器发来的消息,并显示数来的。
ManageChat则是将所有用户的聊天界面放在一个hashmap里管理起来,当遍历这个hashmap时,就可以将消息显示在所有用户的聊天界面了。
然后可以看见在服务器端和客户端都有一个common包,这个是公共包,里面放的是一些javaBean,里面有一些无参数的构造器。
它的存在使得客户端与服务器端的信息交互成为了可能。
其中Message类里是发送信息时用到的构造器,MessageType类里面是服务器验证登录后返回的信息,User类里面则是用户账号和密码的构造器。
而完成上面的所有类中的代码,也是有一定的开发顺序的,首先是完成4个界面的开发。
然后是实现各个界面上的控件的功能和客户端与服务器的功能,先完成服务器,设置端口号,完成启动服务器的功能;接着就是客户端连接服务器的功能,再完成服务器对消息的验证和对线程的创建和管理。
最后就是客户端对消息的发送和接收以与服务器端对消息的接收验证和转发。
3.3聊天室功能的测试
(1)工作过程
首先启动服务器,如果启动成功,会再控制台打印出“在9999端口监听”,然后再运行用户登录的类点击注册账号,账号注册成功后再回到登录界面进行登录,点击登录按钮就可以进入聊天室了。
(2)测试方法
根据工作过程,来启动程序,如果在启动某一程序时出现了错误,先查看错误信息,然后再启动的程序的类里面寻找问题,并多使用System.out.printl方法来打印一些提示的话语,方便自己知道程序运行到了哪一步,是从哪里开始程序没再运行了,通过这样的测试方法就可以慢慢的找到错误的根源,从而不断完善聊天室的功能。
(3)聊天功能的测试
在测试聊天的功能时,主要是站在用户的角度,看看聊天的功能是否真的实现,因此,当程序全部都成功启动后,就可以注册几个账号,同时登陆2到3个进入聊天室,让他们相互聊天,在私聊和群聊里面都发送一些消息,看看是否达到了预期的效果。
结论
(一)毕业设计的总结和展望
本聊天室实现了简单的实时聊天功能,经过细心的调试和排错解决了绝大部分的问题。
但几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。
即使是作为操作系统的各种版本的Windows也时常会发生许多类型的错误和漏洞。
本聊天系统程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此至今还有许多未能解决的缺陷。
目前本聊天系统还有待完善的功能列表如下:
(1)因为设想中是在显示聊天信息的地方点击说话人的账号就可以直接与其私聊,但是也实现不了这个功能,所以私聊功能也暂时搁浅,只完成了群聊的功能。
(2)聊天系统缺乏各种屏蔽发言、发送表情、踢人等功能;
(3)因为电脑无法连接数据源,导致数据库不能被程序使用,所以注册功能最终也没有实现。
(4)也没有详细考虑到服务器端对的聊天室管理功能。
尽管毕业设计到现在已接近尾声,但是对于上述的缺陷,本人还会不断对聊天系统进一步的完善它,期望在今后的日子里凭借自身的技术把系统做成一套深受欢迎的聊天系统。
(二)经验和感想
(1)通过这次毕业设计获得的宝贵经验
经验一:
通过本次课题,我对C/S架构的设计流程有了一个更深刻的认识,清晰的感觉到了服务器端与客户端之间的交互过程,
经验二:
这次的课题让我对以前掌握的不太好的Socket编程,输入输出流的使用和多线程的使用有了更好的了解。
经验三:
这次的课题让我掌握了一些以前不知道的知识,比如hashmap是不能直接遍历的,需要用到迭代器Iterator来实现。
经验四:
通过这次的课题,我对以前搁置很久的数据库知识又进行了一遍新的回顾,虽然大多只是回顾了添删改查和几个约束的知识。
(2)完成毕业设计的感想
Java聊天室作为毕业设计,是本人目前做过的最大的程序。
虽然大学期间在设计过一个简单的ASP聊天室设计,并且经过反复的调试修改也达到了一定的精确性,但接手这个题目时仍感觉十分棘手,但最终还是坚持完成了这个任务。
平时自己也常到其它聊天室进行聊天,因此,自己也曾想过以后学会了电脑就一定亲自设计一款聊天系统,如今,总算实现了自己的梦想。
在学习期间,本人还通过网上的各种JAVA源码进行学习与研究,我原以为这样的设计水平将无法完成毕业设计,但当掌握了大部分应用技巧时,剩下的聊天系统思路的设计就显得不是最大的障碍了。
我在三个月写完这个程序,经过了很多次的调试,终于完成了现在的程序。
原先认为不可能的事,我发现,如果有不畏困难的信心和肯钻研的勇气,就一定会完成,甚至达到意想不到的效果。
参考文献
[1]王养廷.JAVA.SE应用程序设计[M].机械工业,2007.1~3
[2]利国.JAVA软件开发大师[M].科学,2008.3~4
[3]刚.疯狂JAVA[M].人民邮电,2010.4~6
[4]卫琴.JAVA面向对象编程[M].电子工业,2006.4~6
[5]KatthySierra.深入浅出JAVA程序设计[M].机械工业,2006.4~6
[6]BruceEckel.Thinkinjava4[M].机械工业,2008.5~8
[7]沃尔斯.Springinaction[M].人民邮电,2005.5~7
[8]继平.SQLServer2000自学教程[M].清华大学,2000.7~35
[9]曼红.数据库系统原理与自学应用技术[M].机械工业,2010.28~33
[10]王强.SQLServer数据库原理与应用[M].清华大学,2003.28~33
致
紧而忙碌的毕业设计就要结束了,在完成了系统的功能设计后,我感到由衷的喜悦和自豪。
在我做毕业设计期间,许多老师,同学和朋友给我我无私的关怀和帮助,尤其是我的导师尤新华老师。
在此,我要向他们表示衷心的感。
首先,我要感学校的老师在毕业设计期间给了我悉心的关怀与帮助,并且给了我许多关键的,建设性的指导。
这次的毕业设计让我受益匪浅。
可以这样说,用计算机来解决繁重而低效的手工管理工作,计算机发展史上的必然。
在理论课的学习中,我掌握了基础课和专业课的理论知识,也曾经做过一些小的程序设计,但真正动手设计一个这种聊天类的软件,还是第一次。
在这次的毕业设计中,我曾遇到了许多困难,而在克服这些困难的过程中,我的各方面的能力又有了很大的提高,使我的理论知识更好的与实践相结合,增强了专业技能的可实践性。
从调研,需求分析到查找资料,结构设计,详细设计以与调试程序。
我终于设计出了一个比较完整的,周密的,可使用的聊天系统。
通过这次的毕业设计,我真正了解了软件工程设计的整个过程,既巩固了以前的理论知识,也为我以后的工作奠定了良好的基础。
当然,由于时间的短促,我所完成的系统并不是尽善尽美的,还有待进一步的修改和完善。
最后,请允许我再一次向毕业期间无私帮助过我的老师,同学和朋友表示最衷心的感。
附录
(1)登录界面源代码:
package.client.view;
importjavax.swing.*;
import.client.model.ClientUser;
import.client.tools.ManageChat;
import.clientmon.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassClientLoginextendsJFrameimplementsActionListener{
//定义上面的组件
JLabell1;
JPaneljpl1;
JLabell2,l3;
JTextFieldjtf;
JPasswordFieldjpf;
//定义下面的组件
JPaneljpl2;
utton1,2;
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
ClientLogincl=newClientLogin();
}
publicClientLogin()
{
jpl1=newJPanel();
jpl2=newJPanel();
l1=newJLabel("聊天室登陆器",JLabel.CENTER);
l2=newJLabel("账号",JLabel.CENTER);
l3=newJLabel("密码",JLabel.CENTER);
jtf=newJTextField();
jpf=newJPasswordField();
1=newutton("登录");
1.addActionListener(this);
2=newutton("注册");
2.addActionListener(this);
GridBagLayoutgbl=newGridBagLayout();
GridBagConstraintsgc1=newGridBagConstraints();//创建约束对象
jpl1.setLayout(gbl);
gc1.fill=GridBagConstraints.BOTH;//设置fill约束,当控件的大小小于单元格时,填充单元格
gc1.weightx=0;
gc1.weighty=1;
gc1.insets=newInsets(10,10,10,10);
gc1.gridwidth=GridBagConstraints.REMAINDER;//下一个组件将是这行的最后一个组件
gbl.setConstraints(l1,gc1);//第一行填完,共一个组件
GridBagConstraintsgc2=newGridBagConstraints();
gc2.fill=GridBagConstraints.BOTH;
gc2.weightx=1;
gc2.weighty=1;
gbl.setConstraints(l2,gc2);
gc2.weightx=3;
gc2.weighty=1;
gc2.insets=newInsets(0,0,0,10);
gc2.gridwidth=GridBagConstraints.REMAINDER;
gbl.setConstraints(jtf,gc2);
GridBagConstraintsgc3=newGridBagConstraints();
gc3.fill=GridBagConstraints.BOTH;
gc3.weightx=1;
gc3.weighty=1;
gbl.setConstraints(l3,gc3);
gc3.weightx=3;
gc3.weighty=1;
gc3.insets=newInsets(0,0,10,10);
gc3.gridwidth=GridBagConstraints.REMAINDER;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 JAVA 聊天室 设计 说明
![提示](https://static.bdocx.com/images/bang_tan.gif)