• 328.50 KB
  • 2022-04-22 11:39:22 发布

JAVA聊天室的设计与实现毕业论文(1).doc

  • 39页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'湖北大学知行学院本科毕业论文(设计)题目基于JAVA的聊天室设计与实现计算机与信息工程系计算机科学与技术专业学号0811050002学生姓名万小龙指导教师尤新华起讫日期2011.10~2012.4工作地点湖北大学知行学院 目录绪论11课题总体介绍21.1项目开发的目的21.2项目开发的意义22总体设计32.1应用需求分析32.2模块具体分析42.2.1服务器端模块分析42.2.2客户端模块分析42.2.3数据库模块分析42.3聊天室的具体实现52.3.1登录界面的实现52.3.2注册界面的实现52.3.3聊天界面的实现52.3.4服务器界面的实现62.3.5服务器验证登录的实现62.3.6聊天功能的实现63聊天室的详细设计73.1开发环境的配置73.2开发的过程73.3聊天室功能的测试8结论10参考文献11致谢12附录13III 基于JAVA的聊天室设计与实现摘要随着网络的快速发展,网络俨然已经成为了我们了解世界和关注世界各地新动态的一个主要途径了。因此伴随着网络而必然产生的一些软件也越来越多,而能够实现即时通信的聊天软件也是随之诞生,且深受用户们喜爱。而MSN,ICQ,还有国内的QQ等大型聊天软件也成为了人们网络生活中的一部分。本文中主要阐述的是java聊天室的设计过程,以及聊天功能的实现。前台采用的java语言采用C/S架构来设计聊天室,而后台则采用SQLServer2005创建的数据库和表格来管理用户的信息。然后利用这2种工具的结合来完成聊天室的设计。【关键词】网络聊天室即时通信JAVAIII ChatroomDesignwithrealizationbasedonJAVAAbstractWiththerapiddevelopmentofnetwork,thenetworkhasbecomeinamajorwayforustounderstandtheworld.Sowiththenetworkandinevitablehassomesoftwareisalsomoreandmore,andcanrealizeinstantcommunicationchatsoftwareisalsocomesandlovedbyuses.SoMSN,ICQ,QQandotherlargechatsoftwarehasbecomeapartofthepeople’slifefornetwork.ThisarticlemainlyelaboratedinthechatroomofthedesignprocessisJava,andtherealizationofthefunctionofchat.ThefrontdeskoftheJavalanguageusingC/Sarchitecturetodesignachatroom,andthebackdesk,usingthedatabaseandSQLServer2005createformtomanagecustomerinformation.Finally,usingthecombinationofthesetwotoolstocompletethedesignofthechatroom.【Keywords】networkChatroomInstantcommunicationJAVAIII 湖北大学知行学院本科毕业论文(设计)绪论随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见,最直接的网上交流的方式。本系统利用Java实现基于C/S模式的聊天程序。聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登录到服务端才可以实现正常的聊天功能。服务器端的主要实现在特定端口上进行侦听,等待客户端连接;用户可以配置服务端的侦听端口,默认端口为9999;向已经连接到服务端的用户发送系统消息。客户端的主要功能为:连接到已经开启服务的服务端;用户可以配置要连接的端口号;用户可以配置连接后显示的用户的账号;当服务器端开启的话,用户可以随时登录,用户可以向所有人或某一个人发送消息。从而客户与客户之间以及客户与服务器之间可以简单方便地进行通信。主要使用Sun公司提供Java语言、jdk开发环境及套接字通信socket技术,并利用MyEclipse来进行开发,来是实现对服务器端和客户端之间相互交流的功能。35 湖北大学知行学院本科毕业论文(设计)1课题总体介绍1.1项目开发的目的本课题的研究主要目的是可以加深我们对java编程思想的理解,让我们养成一个良好的项目开发的编程习惯,同时也是对我们所学的java编程的一个综合提高。而对聊天室的开发也可以更好的理解C/S架构开发的原理,能够更加熟练的使用多线程、异常处理、Socket编程、输入输出流的使用。1.2项目开发的意义根据当前网络的需求,网络聊天越来越受各种网民所青睐。因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流。而本人也学习过JAVA语言,对网络编程也较有兴趣,为了更好的考验自己对JAVA语言的掌握程度,本人就决定以《Java聊天室》为毕业设计,希望通过这一次能进一步提高本人的网络开发编程的能力。35 湖北大学知行学院本科毕业论文(设计)1总体设计1.1应用需求分析利用Java实现基于C/S模式的聊天程序,聊天系统不外乎两个方面,服务器端和客户端。服务器端程序主要负责侦听客户端发来的消息,客户端需登录到服务端才可以实现正常的聊天功能。简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。首先来看一下服务器端的任务:服务器端的主要功能如下:(1)在特定端口上进行侦听,等待客户端连接。(2)用户可以配置服务端的侦听端口,默认端口为9999。(3)向已经连接到服务端的用户发送系统消息。(4)可以启动和关闭服务器。以上就是服务器端最主要任务。不难看出,服务器端的任务并不复杂。客户端的主要功能如下:(1)连接到已经开启服务的服务端。(2)用户可以注册账号。(3)用户可以通过注册好的账号登陆聊天室。(4)用户可以向所有人或某一个人发送消息。相对服务器而言,客户端的任务也不很复杂,有了以上的简单分析,可以知道,解决上述问题,即完成了该聊天系统的核心。聊天室设计好了,同时还需要数据库的支持,数据库的功能就是对用户注册的账号和密码进行管理,当用户登录时可以进行验证。35 湖北大学知行学院本科毕业论文(设计)1.1模块具体分析模块分析示意图如图2.1所示:图2.1模块分析2.2.1服务器端模块分析服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类java.net.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8888,然后无限循环调用accept()方法接受客户程序的连接。2.2.2客户端模块分析客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造对象流来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,服务器收到来自客户的请求后,针对不同的消息处理请求。2.2.3数据库模块分析数据库用于管理用户的信息,当用户在注册界面成功注册了账号,就存在数据库的用户表里面,当新用户注册时,将新账号与数据库中的账号比较来验证账号是否纯在,也可以验证账号密码是否正确。35 湖北大学知行学院本科毕业论文(设计)1.1聊天室的具体实现2.3.1登录界面的实现登陆界面如图2.2所示:图2.2聊天室的登陆界面该界面用到了3个Jlabel,分别是“聊天室登录器”、“账号”、“密码”。用到了1个JTextFilet,1个JpasswordField,和2个Jbuttton(登录和注册)。然后用网格包布局来管理这些控件。当填写了正确的账号和密码后点击登录按钮可以进入聊天界面,错误则提示“用户名或密码错误”:点击注册按钮则可以进入注册账号的界面。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聊天界面35 湖北大学知行学院本科毕业论文(设计)该界面的控件很少,用一个JtextArea来显示用户们的聊天内容,该空间放在了居中部分。然后是在南边有一个JtextField用来填写用户想说的话,然后点击唯一的Jbutton(发送),就可以发送自己说的话了。2.3.4服务器界面的实现服务器界面的实现如图2.5所示:图2.5服务器界面该界面只用到了2个Jbutton,用来启动和关闭服务器。2.3.5服务器验证登录的实现当用户点击了登录界面的登录按钮之后,用户填写的账号和密码会发送到服务器进行验证,如果账号密码正确,则向客户端发送登录成功的信息;如果账号密码不正确,则向客户端发送信息并以客户端为父窗口弹出子窗口提示说:“账号或密码错误!”。2.3.6聊天功能的实现用户在聊天界面点击发送按钮后,消息发送到服务器,服务器的消息进行分析,如果是私聊,分析出发送这和接收者后,将消息转发给接收者。如果是发送给所有人,就遍历管理服务器连接所有人线程的hashmap,得到连接所有人的线程,将消息发送给所有人,而客户端则遍历管理所有人的聊天界面的hashmap,得到所有人的聊天界面,将消息发送到所有人的界面上。35 湖北大学知行学院本科毕业论文(设计)1聊天室的详细设计1.1开发环境的配置JDK(JavaDevelopmentkit)是SUN公司提供的一套Java开发环境,通常称之为它主要包括了一些常用的JDK工具、执行时需要的函数库、与C连接时所需的文件及一些Java应用程序范例等。JDK可以从SUN公司的网站http://java.sun.com或国内一些常用的资料下载网站免费下载而得。下载完毕便可安装JDK。在安装完JDK之后,必须配置环境变量classpath和path,JDK才能够正常运行。①.在环境变量中新建名为classpath的环境变量(如已经存在则只要修改),值为:E:ProgramFilesJavajdk1.6.0_10lib②.classpath指明Java虚拟机要装载类的路径,“.”表示当前目录③.在环境变量中新建名为path的环境变量(如已经存在则只要修改),值为:E:ProgramFilesJavajdk1.6.0_10jrebin④.path指明了操作系统查找JDK工具如javac、java等文件的路径Sun公司为程序开发者提供了编译、测试、执行程序等一套完备的工具体系,它们被集中存放在主目录的bin目录下。1.2开发的过程开发的过程不是盲目的,要有清晰的思路。分好工作区,建好要用到的包,如:界面就写在名为view的包里面,后台运行的类就写在model包里面等。类视图1如图3.1所示:图3.1类视图1这是服务器端的开发,model层中的类是在后台运行的程序,view层中的类是服务器界面,启动服务器其实是调用的Server类,这个类才是真正的服务器。而SerConClientThread类是服务器连接客户端的线程类,它的作用是接收客户端发来的消息并且转发出去。ManageClientThread类是管理服务器连接客户端线程的类,这个类用HashMap将服务器连接客户端的所有线程管理了起来,方便调用。同样在客户端的开发也是有良好的分层结构,如图3.2所示:35 湖北大学知行学院本科毕业论文(设计)图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个界面的开发。然后是实现各个界面上的控件的功能和客户端与服务器的链接功能,先完成服务器,设置端口号,完成启动服务器的功能;接着就是客户端连接服务器的功能,再完成服务器对消息的验证和对线程的创建和管理。最后就是客户端对消息的发送和接收以及服务器端对消息的接收验证和转发。1.1聊天室功能的测试(1)工作过程首先启动服务器,如果启动成功,会再控制台打印出“在9999端口监听”,然后再运行用户登录的类点击注册账号,账号注册成功后再回到登录界面进行登录,点击登录按钮就可以进入聊天室了。(2)测试方法根据工作过程,来启动程序,如果在启动某一程序时出现了错误,先查看错误信息,然后再启动的程序的类里面寻找问题,并多使用System.out.printl方法来打印一些提示的话语,方便自己知道程序运行到了哪一步,是从哪里开始程序没再运行了,通过这样的测试方法就可以慢慢的找到错误的根源,从而不断完善聊天室的功能。(3)聊天功能的测试35 湖北大学知行学院本科毕业论文(设计)在测试聊天的功能时,主要是站在用户的角度,看看聊天的功能是否真的实现,因此,当程序全部都成功启动后,就可以注册几个账号,同时登陆2到3个进入聊天室,让他们相互聊天,在私聊和群聊里面都发送一些消息,看看是否达到了预期的效果。35 湖北大学知行学院本科毕业论文(设计)结论(一)毕业设计的总结和展望本聊天室实现了简单的实时聊天功能,经过细心的调试和排错解决了绝大部分的问题。但几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。即使是作为操作系统的各种版本的Windows也时常会发生许多类型的错误和漏洞。本聊天系统程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此至今还有许多未能解决的缺陷。目前本聊天系统还有待完善的功能列表如下:(1)因为设想中是在显示聊天信息的地方点击说话人的账号就可以直接与其私聊,但是也实现不了这个功能,所以私聊功能也暂时搁浅,只完成了群聊的功能。(2)聊天系统缺乏各种屏蔽发言、发送表情、踢人等功能;(3)因为电脑无法连接数据源,导致数据库不能被程序使用,所以注册功能最终也没有实现。(4)也没有详细考虑到服务器端对的聊天室管理功能。尽管毕业设计到现在已接近尾声,但是对于上述的缺陷,本人还会不断对聊天系统进一步的完善它,期望在今后的日子里凭借自身的技术把系统做成一套深受欢迎的聊天系统。(二)经验和感想(1)通过这次毕业设计获得的宝贵经验经验一:通过本次课题,我对C/S架构的设计流程有了一个更深刻的认识,清晰的感觉到了服务器端与客户端之间的交互过程,经验二:这次的课题让我对以前掌握的不太好的Socket编程,输入输出流的使用和多线程的使用有了更好的了解。经验三:这次的课题让我掌握了一些以前不知道的知识,比如hashmap是不能直接遍历的,需要用到迭代器Iterator来实现。经验四:通过这次的课题,我对以前搁置很久的数据库知识又进行了一遍新的回顾,虽然大多只是回顾了添删改查和几个约束的知识。(2)完成毕业设计的感想Java聊天室作为毕业设计,是本人目前做过的最大的程序。虽然大学期间在设计过一个简单的ASP聊天室设计,并且经过反复的调试修改也达到了一定的精确性,但接手这个题目时仍感觉十分棘手,但最终还是坚持完成了这个任务。平时自己也常到其它聊天室进行聊天,因此,自己也曾想过以后学会了电脑就一定亲自设计一款聊天系统,如今,总算实现了自己的梦想。在学习期间,本人还通过网上的各种JAVA源码进行学习与研究,我原以为这样的设计水平将无法完成毕业设计,但当掌握了大部分应用技巧时,剩下的聊天系统思路的设计就显得不是最大的障碍了。我在三个月内写完这个程序,经过了很多次的调试,终于完成了现在的程序。原先认为不可能的事,我发现,如果有不畏困难的信心和肯钻研的勇气,就一定会完成,甚至达到意想不到的效果。35 湖北大学知行学院本科毕业论文(设计)参考文献[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~3335 湖北大学知行学院本科毕业论文(设计)致谢紧张而忙碌的毕业设计就要结束了,在完成了系统的功能设计后,我感到由衷的喜悦和自豪。在我做毕业设计期间,许多老师,同学和朋友给我我无私的关怀和帮助,尤其是我的导师尤新华老师。在此,我要向他们表示衷心的感谢。首先,我要感谢学校的老师在毕业设计期间给了我悉心的关怀与帮助,并且给了我许多关键的,建设性的指导。这次的毕业设计让我受益匪浅。可以这样说,用计算机来解决繁重而低效的手工管理工作,计算机发展史上的必然。在理论课的学习中,我掌握了基础课和专业课的理论知识,也曾经做过一些小的程序设计,但真正动手设计一个这种聊天类的软件,还是第一次。在这次的毕业设计中,我曾遇到了许多困难,而在克服这些困难的过程中,我的各方面的能力又有了很大的提高,使我的理论知识更好的与实践相结合,增强了专业技能的可实践性。从调研,需求分析到查找资料,结构设计,详细设计以及调试程序。我终于设计出了一个比较完整的,周密的,可使用的聊天系统。通过这次的毕业设计,我真正了解了软件工程设计的整个过程,既巩固了以前的理论知识,也为我以后的工作奠定了良好的基础。当然,由于时间的短促,我所完成的系统并不是尽善尽美的,还有待进一步的修改和完善。最后,请允许我再一次向毕业期间无私帮助过我的老师,同学和朋友表示最衷心的感谢。35 湖北大学知行学院本科毕业论文(设计)附录(1)登录界面源代码:packagecom.client.view;importjavax.swing.*;importcom.client.model.ClientUser;importcom.client.tools.ManageChat;importcom.client.common.*;importjava.awt.*;importjava.awt.event.*;publicclassClientLoginextendsJFrameimplementsActionListener{//定义上面的组件JLabeljbl1;JPaneljpl1;JLabeljbl2,jbl3;JTextFieldjtf;JPasswordFieldjpf;//定义下面的组件JPaneljpl2;JButtonjb1,jb2;publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubClientLogincl=newClientLogin();}publicClientLogin(){jpl1=newJPanel();jpl2=newJPanel();jbl1=newJLabel("聊天室登陆器",JLabel.CENTER);jbl2=newJLabel("账号",JLabel.CENTER);jbl3=newJLabel("密码",JLabel.CENTER);jtf=newJTextField();jpf=newJPasswordField();jb1=newJButton("登录");jb1.addActionListener(this);jb2=newJButton("注册");jb2.addActionListener(this);35 湖北大学知行学院本科毕业论文(设计)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(jbl1,gc1);//第一行填完,共一个组件GridBagConstraintsgc2=newGridBagConstraints();gc2.fill=GridBagConstraints.BOTH;gc2.weightx=1;gc2.weighty=1;gbl.setConstraints(jbl2,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(jbl3,gc3);gc3.weightx=3;gc3.weighty=1;gc3.insets=newInsets(0,0,10,10);gc3.gridwidth=GridBagConstraints.REMAINDER;gbl.setConstraints(jpf,gc3);jpl1.add(jbl1);jpl1.add(jbl2);jpl1.add(jtf);jpl1.add(jbl3);jpl1.add(jpf);jpl2.add(jb1);jpl2.add(jb2);this.add(jpl1,"Center");this.add(jpl2,"South");this.setSize(300,200);35 湖北大学知行学院本科毕业论文(设计)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubif(e.getSource()==jb1){ClientUserclientUser=newClientUser();Useru=newUser();u.setUserId(jtf.getText().trim());u.setPasswd(newString(jpf.getPassword()));if(clientUser.checkUser(u)){Chatchat=newChat(u.getUserId());//把聊天界面加入到管理类ManageChat.addChat(u.getUserId(),chat);this.dispose();}else{JOptionPane.showMessageDialog(this,"用户名密码错误");}}elseif(e.getSource()==jb2){newRegister();this.dispose();}}}(2)注册界面的源代码:packagecom.client.view;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.sql.*;publicclassRegisterextendsJFrameimplementsActionListener{JPaneljpl1,jpl2;JLabeljbl1,jbl2,jbl3,jbl4;JTextFieldjtf;35 湖北大学知行学院本科毕业论文(设计)JPasswordFieldjpf1,jpf2;JButtonjb1,jb2;publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubRegisterrgt=newRegister();}publicRegister(){jpl1=newJPanel();jpl2=newJPanel();jbl1=newJLabel("注册聊天账号",JLabel.CENTER);jbl2=newJLabel("输入账号",JLabel.CENTER);jbl3=newJLabel("输入密码",JLabel.CENTER);jbl4=newJLabel("确认密码",JLabel.CENTER);jtf=newJTextField();jpf1=newJPasswordField();jpf2=newJPasswordField();jb1=newJButton("确定");jb1.addActionListener(this);jb2=newJButton("取消");jb2.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(jbl1,gc1);//第一行填完,共一个组件GridBagConstraintsgc2=newGridBagConstraints();gc2.fill=GridBagConstraints.BOTH;gc2.weightx=1;gc2.weighty=1;gbl.setConstraints(jbl2,gc2);gc2.weightx=3;gc2.weighty=1;gc2.insets=newInsets(0,0,10,10);gc2.gridwidth=GridBagConstraints.REMAINDER;35 湖北大学知行学院本科毕业论文(设计)gbl.setConstraints(jtf,gc2);GridBagConstraintsgc3=newGridBagConstraints();gc3.fill=GridBagConstraints.BOTH;gc3.weightx=1;gc3.weighty=1;gbl.setConstraints(jbl3,gc3);gc3.weightx=3;gc3.weighty=1;gc3.insets=newInsets(0,0,10,10);gc3.gridwidth=GridBagConstraints.REMAINDER;gbl.setConstraints(jpf1,gc3);GridBagConstraintsgc4=newGridBagConstraints();gc4.fill=GridBagConstraints.BOTH;gc4.weightx=1;gc4.weighty=1;gbl.setConstraints(jbl4,gc4);gc4.weightx=3;gc4.weighty=1;gc4.insets=newInsets(0,0,10,10);gc4.gridwidth=GridBagConstraints.REMAINDER;gbl.setConstraints(jpf2,gc4);jpl1.add(jbl1);jpl1.add(jbl2);jpl1.add(jtf);jpl1.add(jbl3);jpl1.add(jpf1);jpl1.add(jbl4);jpl1.add(jpf2);jpl2.add(jb1);jpl2.add(jb2);this.add(jpl1,"Center");this.add(jpl2,"South");this.setSize(300,260);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubConnectionct=null;35 湖北大学知行学院本科毕业论文(设计)Statementsm=null;if(e.getSource()==jb1){try{//加载驱动Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//得到连接数据源try{ct=DriverManager.getConnection("jdbc:odbc:mychat");}catch(SQLExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}try{sm=ct.createStatement();}catch(SQLExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}try{ResultSetrs=sm.executeQuery("select*fromchat1");while(rs.next()){StringuserId=rs.getString(1);Stringpasswd=rs.getString(2);if(userId.equals(this.jtf.getText())){JOptionPane.showMessageDialog(this,"用户名已存在,请重新注册!");}elseif((this.jpf1.getText()).equals(this.jpf2.getText())){JOptionPane.showMessageDialog(this,"密码不一致,请重新注册!");}else{//把填写的内容写入数据库}}}catch(SQLExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}catch(ClassNotFoundExceptione1){//TODOAuto-generatedcatchblock35 湖北大学知行学院本科毕业论文(设计)e1.printStackTrace();}finally{//关闭try{sm.close();ct.close();}catch(SQLExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}}elseif(e.getSource()==jb2){this.dispose();}}}(3)聊天界面的源代码:packagecom.client.view;importjavax.swing.*;importcom.client.tools.*;importcom.client.common.*;importcom.client.model.*;importjava.util.*;importjava.awt.*;importjava.awt.event.*;importjava.io.*;publicclassChatextendsJFrameimplementsActionListener{publicstaticvoidmain(String[]args){//Chatchat=newChat();}JTextAreajta;JTextFieldjtf;JButtonjb;JPaneljpl;StringownerId;publicChat(StringownerId){this.ownerId=ownerId;35 湖北大学知行学院本科毕业论文(设计)jta=newJTextArea();jtf=newJTextField(15);jb=newJButton("发送");jb.addActionListener(this);jpl=newJPanel();jpl.add(jtf);jpl.add(jb);this.add(jta,"Center");this.add(jpl,"South");this.setTitle(ownerId);this.setSize(500,400);this.setVisible(true);}//写一个方法,让它显示消息publicvoidshowMessage(Messagem){Stringinfo=m.getSender()+"说:"+m.getCon()+"rn";this.jta.append(info);}@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubif(e.getSource()==jb){//如果用户点击了发送按钮Messagem=newMessage();m.setCon(jtf.getText());m.setSendTime(newDate().toString());m.setSender(this.ownerId);//发送信息到服务器try{ObjectOutputStreamoos=newObjectOutputStream(ManageClientConServerThread.getClientConServerThread(ownerId).getS().getOutputStream());oos.writeObject(m);}catch(Exceptionex){ex.printStackTrace();}}}35 湖北大学知行学院本科毕业论文(设计)(4)服务器界面的源代码:packagecom.server.view;importjavax.swing.*;importcom.server.model.Server;importjava.awt.*;importjava.awt.event.*;publicclassServerFrameextendsJFrameimplementsActionListener{JPaneljpl;JButtonjb1,jb2;publicstaticvoidmain(String[]args){ServerFramesf=newServerFrame();}publicServerFrame(){jpl=newJPanel();jb1=newJButton("启动服务器");jb1.addActionListener(this);jb2=newJButton("关闭服务器");jb2.addActionListener(this);jpl.add(jb1);jpl.add(jb2);this.add(jpl);this.setSize(500,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}publicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubif(e.getSource()==jb1){35 湖北大学知行学院本科毕业论文(设计)newServer();}elseif(e.getSource()==jb2){this.dispose();}}(5)Server类得源代码:packagecom.server.model;importjava.net.*;importjava.io.*;importjava.util.*;importcom.client.common.*;publicclassServer{publicServer(){try{System.out.println("在9999监听");ServerSocketss=newServerSocket(9999);while(true){//阻塞,等待连接Sockets=ss.accept();ObjectInputStreamois=newObjectInputStream(s.getInputStream());Useru=(User)ois.readObject();System.out.println("服务器接收到用户id:"+u.getUserId()+"密码:"+u.getPasswd());Messagem=newMessage();ObjectOutputStreamoos=newObjectOutputStream(s.getOutputStream());if(u.getPasswd().equals("123456")){//返回一个成功登陆的信息报m.setMesType("1");oos.writeObject(m);//单开一个线程与客户端保持通信SerConClientThreadscct=newSerConClientThread(s);35 湖北大学知行学院本科毕业论文(设计)ManageClientThread.addClientThread(u.getUserId(),scct);//启动与该客户端保持通信的线程scct.start();}else{m.setMesType("2");oos.writeObject(m);//关闭Sockets.close();}}}catch(Exceptione){e.printStackTrace();//TODO:handleexception}finally{}}}(6)SerConClientThread类的源代码:/**工能:服务器与某个客户端的通信线程*/packagecom.server.model;importjava.io.*;importjava.net.*;importjava.util.*;//importjavax.swing.text.html.HTMLDocument.Iterator;importcom.client.common.*;importcom.client.common.*;publicclassSerConClientThreadextendsThread{Sockets;publicSerConClientThread(Sockets){35 湖北大学知行学院本科毕业论文(设计)//把服务器与该客户端的连接赋给s;this.s=s;}publicvoidrun(){while(true){System.out.println("===============");//该线程接受客户端的信息try{ObjectInputStreamois=newObjectInputStream(s.getInputStream());Messagem=(Message)ois.readObject();//ThreadtSend;for(Iteratoriter=(Iterator)ManageClientThread.hm.keySet().iterator();((java.util.Iterator)iter).hasNext();){//遍历管理服务器连接客户端的线程的hashmap,获得这些线程,并把消息发送出去Objectkey=iter.next();SerConClientThreadscct=(SerConClientThread)ManageClientThread.hm.get(key);ObjectOutputStreamoos=newObjectOutputStream(scct.s.getOutputStream());oos.writeObject(m);}}catch(Exceptione){e.printStackTrace();}}}}(7)ManageClientThread类的源代码:packagecom.server.model;importjava.util.*;publicclassManageClientThread{publicstaticHashMaphm=newHashMap();//想hm中添加一个客户端通讯线程publicstaticvoidaddClientThread(Stringuid,SerConClientThreadct){hm.put(uid,ct);}35 湖北大学知行学院本科毕业论文(设计)//得到客户端通信线程publicstaticSerConClientThreadgetClientThread(Stringuid){return(SerConClientThread)hm.get(uid);}}(8)ClientConServer类的源代码:packagecom.client.model;importjava.util.*;importjava.net.*;importjava.io.*;importcom.client.common.*;importcom.client.tools.*;publicclassClientConServer{publicSockets;//发送第一次请求publicbooleansendLoginInfoToServer(Objecto){booleanb=false;try{//System.out.println("kk");s=newSocket("127.0.0.1",9999);ObjectOutputStreamoos=newObjectOutputStream(s.getOutputStream());oos.writeObject(o);ObjectInputStreamois=newObjectInputStream(s.getInputStream());Messagems=(Message)ois.readObject();//验证用户登录if(ms.getMesType().equals("1")){//登录成功就创建一个该用户与服务器连接通讯的线程ClientConServerThreadccst=newClientConServerThread(s);ccst.start();ManageClientConServerThread.addClientConServerThread(((User)o).getUserId(),ccst);b=true;}else{b=false;35 湖北大学知行学院本科毕业论文(设计)//关闭Scokets.close();}}catch(Exceptione){e.printStackTrace();//TODO:handleexception}finally{}returnb;}}(9)ClientUser类的源代码:packagecom.client.model;importcom.client.common.*;publicclassClientUser{publicbooleancheckUser(Useru){returnnewClientConServer().sendLoginInfoToServer(u);}}(10)ClientConServerThread类的源代码:packagecom.client.tools;importjava.io.*;importjava.net.*;importjava.util.Iterator;importcom.client.common.*;importcom.client.view.Chat;publicclassClientConServerThreadextendsThread{privateSockets;publicSocketgetS(){returns;}35 湖北大学知行学院本科毕业论文(设计)publicvoidsetS(Sockets){this.s=s;}//构造函数publicClientConServerThread(Sockets){this.s=s;}publicvoidrun(){while(true){//不停的读取从服务器发来的消息try{ObjectInputStreamois=newObjectInputStream(s.getInputStream());Messagem=(Message)ois.readObject();for(Iteratoriter=(Iterator)ManageChat.hmChat.keySet().iterator();((java.util.Iterator)iter).hasNext();){Objectkey=iter.next();Chatchat=(Chat)ManageChat.hmChat.get(key);//把从服务器获得消息,显示到该显示的聊天界面chat.showMessage(m);}}catch(Exceptione){e.printStackTrace();}}}}(11)ManageChat类的源代码:packagecom.client.tools;importjava.util.*;importcom.client.view.*;35 湖北大学知行学院本科毕业论文(设计)publicclassManageChat{publicstaticHashMaphmChat=newHashMap();//加入publicstaticvoidaddChat(Stringuid,ChatChat){hmChat.put(uid,Chat);}//取出publicstaticChatgetChat(Stringuid){return(Chat)hmChat.get(uid);}}(12)ManageClientConServerThread类的源代码:packagecom.client.tools;importjava.util.HashMap;publicclassManageClientConServerThread{privatestaticHashMaphm=newHashMap();//把创建好的ClientConServerThread放入到hmpublicstaticvoidaddClientConServerThread(Stringuid,ClientConServerThreadccst){hm.put(uid,ccst);}//可以通过userId取得该线程publicstaticClientConServerThreadgetClientConServerThread(Stringuid){return(ClientConServerThread)hm.get(uid);}}(13)Message类的源代码:packagecom.client.common;publicclassMessageimplementsjava.io.Serializable{privateStringmesType;privateinthmSize;35 湖北大学知行学院本科毕业论文(设计)privateStringsender;privateStringcon;privateStringsendTime;publicintgetHmSize(){returnhmSize;}publicvoidsetHmSize(inthmSize){this.hmSize=hmSize;}publicStringgetSender(){returnsender;}publicvoidsetSender(Stringsender){this.sender=sender;}publicStringgetCon(){returncon;}publicvoidsetCon(Stringcon){this.con=con;}publicStringgetSendTime(){returnsendTime;}publicvoidsetSendTime(StringsendTime){this.sendTime=sendTime;}publicStringgetMesType(){returnmesType;}publicvoidsetMesType(StringmesType){this.mesType=mesType;}}35 湖北大学知行学院本科毕业论文(设计)(14)MessageType类的源代码:packagecom.client.common;publicclassMessageType{Stringmessage_succeed="1";//表明是登陆成功Stringmessage_login_fail="2";//表明登录失败Stringmessage_comm_mes="3";//普通信息包}(15)User类的源代码:/***这是用户信息类*/packagecom.client.common;publicclassUserimplementsjava.io.Serializable{privateStringuserId;privateStringpasswd;publicStringgetUserId(){returnuserId;}publicvoidsetUserId(StringuserId){this.userId=userId;}publicStringgetPasswd(){returnpasswd;}publicvoidsetPasswd(Stringpasswd){this.passwd=passwd;}}以下免费送您一百个优秀毕业论文题目,供参考。1.企业集团激励与绩效评价问题研究2.XXX地区中小企业财务管理现状问题研究3.XXX地区上市公司盈利质量实证研究4.XXX地区企业集团整合过程中的财务问题研究35 湖北大学知行学院本科毕业论文(设计)5.XXX地区中小企业的信用担保体系问题研究6.XXX地区上市公司财务预警问题研究7.企业并购前后财务状况变化问题研究8.以平衡计分卡为核心的绩效评价体系研究9.EVA在企业绩效评价中的作用研究10.关于我区中小企业引入风险投资问题研究11.我国上市公司经营目标的实证分析12.对内含报酬率法的再思考13.利用平衡计分卡落实战略的案例分析14.基于EVA的企业业绩评价指标体系的构建与实施研究15.基于不同发展周期的企业财务战略选择研究16.集团公司全面预算目标的制定与分解17.现金流量折现法在评估公司战略中的应用分析18.财务指标与非财务指标在评估管理者业绩中的应用拟合19.我国企业财务管理目标的现实选择20.财务管理目标与企业财务核心能力问题研究21.企业财务管理中运用税收筹划的探讨22.建立以财务管理为核心的资源配置制度23.财务预警系统在财务管理中应用评价24.基于Excel的财务预警模型研究25.中西部地区中小企业财务战略选择问题研究26.中小企业纳税筹划问题研究27.企业投资过程中的纳税筹划问题研究28.企业集团纳税筹划问题研究35 湖北大学知行学院本科毕业论文(设计)29.企业纳税筹划中的风险规避问题研究30.从公司治理结构透视财务管理目标31.作业成本管理模式及其应用研究32.论管理层并购在我国的运用33.企业并购中的财务风险与防范34.跨国公司财务管理策略及其在我国的实践35.关于上市公司并购的财务分析36.跨国公司财务管理体制的比较与选择37.跨国公司财务管理策略及其在中国的实践38.全球化与财务管理发展趋势及其模式选择39.财务治理与财务管理之异同40.EVA对传统财务管理的冲击41.企业财务管理机制重塑问题探讨42.财务管理发展的文化分析43.利益相关者合作模式下的财务管理目标选择44.行为财务管理探索——以价值管理为中心45.上市公司股利政策实证研究46.公司治理结构与财务管理目标问题研究47.产权理论分析与财务管理目标的现实选择48.金融工具创新与企业财务管理49.对价值链财务管理目标的探讨50.IT信息产业企业的财务管理51.期权在财务管理中的运用52.论创业投资在我国所面临的财务问题35 湖北大学知行学院本科毕业论文(设计)53.风险投资退出机制问题研究54.企业可持续发展与财务管理问题研究55.企业集团资金链构造问题研究56.内蒙古地区上市公司融资效率实证研究57.预算管理在ERP系统中的运用问题研究58.发展中小企业信贷融资的思考59.中小企业在不同发展阶段战略选择问题研究60.连锁经营企业财务管理创新61.对我国中小企业风险投资的探讨62.中西部地区中小企业融资策略研究63.融资租赁在中小企业中的运用问题研究 64.对我国中小企业信用管理的研究65.对我国中小企业创业版上市公司成长性分析的探讨66.对连锁经营企业资金运行管理的思考67.推行全面预算管理 建立新型财务管理体系68.机会成本及其在企业财务管理中的应用69.建立以预算管理为中心的财务管理模式70.论边际成本在企业理财中的运用71.企业融资障碍及对策研究72.高新技术企业财务管理若干问题的思考73.企业的扩张与财务管理74.行为财务管理新论75.论破产企业财务管理存在的问题及对策76.企业核心能力与财务管理能力研究35 湖北大学知行学院本科毕业论文(设计)77.我区企业利用外资融资效率分析78.我区中小企业创新模式研究—基于财务视角79.企业集团成本管理的创新问题研究80.集团公司财务管理模式的探讨81.非营利组织财务管理面临的问题及对策研究82.企业激励与绩效评价问题研究83.我区企业集团财务战略选择问题研究84.非营利组织财务管理创新问题研究85.企业集团资本运营问题研究86.论表内融资与表外融资的关系87.EVA—现代企业的最佳绩效评价指标88.对杜邦分析法的再思考89.EVA与传统业绩评价方法结合问题研究90.财务分析指标体系创新问题研究91.非财务分析法与财务分析法结合有效性研究92.非财务指标在业绩评价体系中运用的有效性问题研究93.关于经营者业绩评价的思考94.企业融资效率实证研究95.信息时代财务控制趋势分析96.期权在企业投资决策中的应用97.企业集团融资中的风险规避问题研究98.我区企业的融资创新问题研究99.现代资本预算技术在企业理财中的运用100.国有资本减持的财务风险研究35 湖北大学知行学院本科毕业论文(设计)35'