JAVA网络聊天程序(毕业论文)

上传人:仙*** 文档编号:31632300 上传时间:2021-10-12 格式:DOC 页数:57 大小:580.50KB
收藏 版权申诉 举报 下载
JAVA网络聊天程序(毕业论文)_第1页
第1页 / 共57页
JAVA网络聊天程序(毕业论文)_第2页
第2页 / 共57页
JAVA网络聊天程序(毕业论文)_第3页
第3页 / 共57页
资源描述:

《JAVA网络聊天程序(毕业论文)》由会员分享,可在线阅读,更多相关《JAVA网络聊天程序(毕业论文)(57页珍藏版)》请在装配图网上搜索。

1、编号 本科生毕业设计网络聊天程序Network chat program学 生 姓 名专 业计算机科学与技术学 号指 导 教 师学 院计算机科学技术2009年6月- 54 -长春理工大学毕业设计摘 要随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。目前聊天工具应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。后者通过与服务器建立连接,来进行客户端与客户端的信息交流。其中用

2、到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统。关键词:网络 聊天 套接字 JavaAbstractAlong with the fast development of Internet, the network chating tool has already become one kind of important communication tools and received more a

3、nd more web cams favor. At present, Chat tools have a broader application of Netmeeting, Tencent QQ, MSN-Messager, etc. This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat. The former establishes the server th

4、rough the Socket, the server can read and deliver the information which client side sends, and can renovate the users tabulation. The latter make a connection with the server, carries on communication between the client side and the client side. After analyzes these situations, this LAN chating tool

5、 takes Eclipse as the basic development environment and compiles in java language. first, it will establish the system application prototype in a short time. then, for the initial prototype system, it needs constantly revised and improved, until a viable system.Key words: Network Chat Socket Java目录第

6、一章概论- 1 -1.1课题来源- 1 -1.2国内外研究现状- 1 -第二章JAVA的网络功能与编程- 3 -2.1 JAVA概述- 3 -2.2 JAVA的特点- 3 -2.3 JAVA语言在网络上的应用- 7 -第三章总体设计- 9 -3.1 需求分析- 9 -3.2 设计要点- 9 -3.3 功能模块及设计步骤- 10 -3.1.1 功能模块- 10 -3.1.2 设计步骤- 10 -第四章详细设计与实现- 12 -4.1 开发环境- 12 -4.2 核心功能实现- 12 -4.2.1 Socket的简介- 12 -4.2.2 服务器与客户端之间的通信- 14 -4.2.3 流程图-

7、15 -4.3 功能模块的测试- 18 -总结- 22 -致谢- 23 -参考文献- 24 -附录- 25 -第一章概论1.1课题来源随着当前网络的迅速流行,网上聊天已经越来越受网民所青睐。因此开发网络聊天程序已经是相当有必要。同时在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流。目前应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等为了加深对Java编程语言的理解,本人选择了以网络聊天程序为毕业设计,并希望通过这一次的设计编程能进一步提高本人的网络开发编程的能力,以及对JAVA语言的更深的掌握,了解编程的基本

8、步骤。1.2国内外研究现状网络聊天软件现状网络上已有聊天工具按照其功能大概可以分为四大类:其一是单一的即时通讯工具,如QQ,Aim,MSN messenger ,Yahoo Messenger特点是主要是进行通讯,包括语音,文本以及视频等。其二在通讯上附加了娱乐,P2P功能,如UC,Popo ,他们除了可以进行聊天之外还可以传输文件,快捷,方便。 其三是以P2P功能为主,同时可以文本聊天。其四就是在一个软件中可以把其他聊天通讯工具集成过来,当然这种集成是可以通过多种方式的,比如Trillian是安装一个软件替代其他的,并可以与其他的进行通讯,目前包括MSN messenger, Yahoo m

9、essenger ,还有Odigo它则是把其他的即时通讯工具作为外挂集合起来的,但是也不错啊,这样可以避免哪个聊天工具上朋友被漏掉。相比较这四类,它们更有特色。但目前它们大多都融合了别的工具的功能,成为网络上很重要的通讯和娱乐工具。就说我们大家都很熟悉的QQ来说吧,它现在已经集聊天、娱乐甚至购物等功能于一身,已经是网友们离不开的网络工具之一。2展望:简单的说,在国内QQ遍地都是的时候, UC也悄悄的出现,真实定义为university comunicate,取you see you say之音。该聊天工具不公可以让我们相互聊天,同时娱乐,还可以自主开发相应插件,定制自己的uc。尽管现在它还不是

10、很稳定,也不是功能很强大,但是一旦成熟起来,将是很吸引人的。通过对即时通讯工具的长期观察和使用,就会发现,即时通讯工具要经营的好,就必须得象QQ一样,要引领一种文化者说气氛,微软为什么要研发三度(threedegrees),微软是致力于培养“网络一代”成为其忠实用户,目标用户是那些十几岁的孩子和年轻的成年人。微软的研究发现伴随网络成长起来的年轻一代与过去的一代在网络生活中有很大的不同,只有根据不同的行为习惯设计合适的软件才能吸引他们。网络聊天室是当今广泛应用的一种网络服务, 它为广大网民提供了一种方便快捷的沟通方式, 在线聊天是上网的重要活动之一。第十六次CNNIC 调查结果显示: 在网络用户

11、经常使用的网络服务/功能调查中, 网上聊天( 聊天室、QQ、ICQ 等)占被调查人群的42.6%, 处于第四位,是一个很可观的数字。在网站由窄带向宽带发展的今天, 新一代的聊天室充分利用富媒体技术, 以崭新的形象吸引受众视听。文本方式聊天室: 基于Web 的聊天室有其独特的优势。它不需要安装专门的软件,Web 浏览器就可以使用聊天服务;它集成在Web 服务器中,不需额外的硬件支持,便于广大中小型客户建设和使用。所以, 基于Web 的聊天室仍然被广泛采用。但是单纯聊天的一般内容比较单一,主要局限于角色认知过程中职业、地域、性别等方面的扩展。视频聊天室、语音聊天室、动画聊天室: 随着富媒体技术的广

12、泛应用, 一种结合文本、语音和人脸动画或视频的三维语音视频聊天室在互联网上出现。比如碧聊、E 聊视频聊天室等。视频聊天室、语音聊天室主要特点是利用宽带技术, 在聊天室中增加视频与语音功能。动画聊天室的一般模式是由客户端和服务器两部分组成, 多个用户利用客户端连接到服务器上, 用户可以输入文本并且选择各种表情, 由客户端混合成带有表情标签的文本传送给服务器。服务器将该用户的三维人脸模型以及带有表情标签的文本传送给接收方, 由接收方的客户端合成为带有表情的语音动画。这种多媒体技术的应用使聊天室进行网上直播、进行才艺展示、建设边娱乐边聊天的社区服务模式成为可能。复合聊天室: 典型代表是UC 聊天室,

13、 它打破了传统IM软件主要用于文字通讯的单一模式, 将有声有色、图文并茂的场景融入聊天模式, 加之视频电话、可断点续传的文件传输、消息群发功能和在线游戏功能以及同学录( 团体) 等有机结合, 形成一个完整的网上即时通讯娱乐平台, 带来聊天新感觉。第二章JAVA的网络功能与编程2.1 JAVA概述美国硅谷有一句行话,每10年15年有一次轮回。最近的一次轮回就是从Java开始。Java是一个由Sun公司开发而成的新一代编程语言。使用它可在各式各样不同种机器、不同种操作平台的网络环境中开发软件。不论用户使用的是哪一种WWW浏览器,哪一种计算机,哪一种操作系统,只要WWW浏览器上面注明了“支持Java

14、”,用户就可以看到生动的主页。Java正在逐步成为Internet应用的主要开发语言。它彻底改变了应用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。Java1.0版在1996年年初正式发表。Java带来的影响Java虽出现的时间不长,但已被业界接受,IBM、Apple、DEC、Adobe、SiliconGraphics、HP、Oracle、Toshiba、Netscap和Microsoft等大公司已经购买了Java的许可证。Microsoft还在其Web浏览器Explorer3.0版中增加了对Java的支持。另外,众多的软件开发商也开发了许多支持Java

15、的软件产品。如:Borland公司的基于Java的快速应用程序开发环境Latte;Metrowerks公司和NaturalIntelligence公司分别开发的基于Machintosh的Java开发工具;Sun公司的Java开发环境JavaWorkshop;Microsoft也开发出系列Java产品。数据库厂商如Illustra,Sybase,Versant,Oracle都在开发支持HTML和Java的CGI(CommonGatewayInterface)。在以网络为中心的计算时代,不支持HTML和Java,就意味着应用程序的应用范围只能限于同质的环境。Intranet正在成为企业信息系统最佳

16、的解决方案。它的优点表现在:便宜、易于使用和管理。用户不管使用何种类型的机器和操作系统,界面是统一的Web浏览器,而数据库、Web页面、应用程序(用Java编的applet)则存在WWW服务器上。开发人员只需维护一个软件版本,管理人员省去了为用户安装、升级、培训之苦,用户则只需一个操作系统,一个Internet浏览器足矣。12.2 JAVA的特点(一)JAVA的主要特点Java语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、 安全、体系结构中立、可移植、高性能、多线程以及动态性。1.简单性Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概

17、念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,,且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。另外,Java也适合于在小型机上运行,它的基本解释器及类的支持只有40KB左右,加上标准类库和线程的支持也只有215KB左右。库和线程的支持也只有215KB左右。2.面向对象Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。3.分布性Java是面向网络的语言。

18、通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便地访问其它对象。4.鲁棒性Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的例外处理机制,在编译时,Java提示出可能出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外, Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。5.安全性用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现,

19、这样就防止程序员使用 “特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易 产生的错误。6.体系结构中立Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟 机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平 台运行。7.可移植性与平台无关的特性使Java程序可以方便地被移植到网络上的不同机器。 同时,Java的类库中也实现了与不同平台的接口,使这些类库可以移植。另外,Java编译器是由Java语言实现的,Java运行时系统由标准C实现,这使得Java 系统本身

20、也具有可移植性。8.解释执行Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。9.高性能和其它解释执行的语言如BASIC不同,Java字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。10.多线程多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。11.动态性Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入 新的方法和实例变量而不会影响用户

21、程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。1(二)JavaApplet Java语言的特性使它可以最大限度地利用网络。Ap-plet是Java的小应 用程序,它是动态、安全、跨平台的网络应用程序。JavaApplet嵌入HTML语 言,通过主页发布到Internet。网络用户访问服务器的Applet时,这些Applet 从网络上进行传输,然后在支持Java的浏览器中运行。由于Java语言的安全机 制,用户一旦载入Applet,就可以放心地来生成多媒体的用户界面或完成复杂的 计算而不必担心病毒的入侵。虽然Applet可以和图像、声音、动画等一样从

22、网 络上下载,但它并不同于这些多媒体的文件格式,它可以接收用户的输入,动态 地进行改变,而不仅仅是动画的显示和声音的播放。(三)丰富的类库Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。1.语言包提供的支持包括字符串处理、多线程处理、例外处理、数学函 数处理等,可以用它简单地实现Java程序的运行平台。2.实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。3.输入输出包用统一的流模型来实现所有格式的I/O,包括文件系统、 网络、输入4.低级网络包用于实现Socket编程。5.抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框

23、等,使得Java可以移植到不同平台的机器。6.网络包支持Internet的TCP/IP协议,提供了与In-ternet的接口。 它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。(四)Java和C、C+对于变量声明、参数传递、操作符、流控制等,Java使用了和C、C+ 相同的传统,使得熟悉C、C+的程序员能很方便地进行编程。同时,Java为 了实现其简单、鲁棒、安全等特性,也摒弃了C和C+中许多不合理的内容。1.全局变量Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定 义公用、静态的变量来实现一个全局变量。例如:ClassGlobalVar publi

24、c static global_var; 在类GlobalVar中定义变量global_var为public static,使得其它类 可以访问和修改该变量。 Java对全局变量进行了更好的封装。而在C和C+中,依赖于不加封装 的全局变量常常造成系统的崩溃。2.GotoJava不支持C、C+中的goto语句,而是通过例外处理语句try,Catch, final等来代替C、C+中用goto来处理遇到错误时跳转的情况,使程序更可读 且更结构化。 3.指针指针是C、C+中最灵活,也是最容易产生错误的数据类型。由指针所进行 的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显 式类型

25、转换后,可以访问一个C+中的私有成员,从而破坏安全性,造成系统的 崩溃。而Java对指针进行完全的控制,程序员不能直接进行任何指针操作,例如 把整数转化为指针,或者通过指针释放某一内存地址等。同时,数组作为类在Java 中实现,良好地解决了数组访问越界这一C、C+中不作检查的错误。4.内存管理在C中,程序员通过库函数malloc()和free()来分配和释放内存,C+ 中则通过运算符new和delete来分配和释放内存。再次释放已释放的内存块或 未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也 会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new 为

26、它们分配内存堆。通过new得到对象的处理权,而实际分配给对象的内存可能 随程序运行而改变,Java对此自动地进行管理并且进行垃圾收集,有效防止了由 于程序员的误操作而导致的错误,并且更好地利用了系统资源。5.数据类型的支持在C、C+中,对于不同的平台,编译器对于简单数据类型如int,float 等分别分配不同长度的字节数,例如:int在IBMPC中为16位,在VAX-11中为 32位,这导致了代码的不可移植性,但在Java中,对于这些数据类型总是分 配固定长度的位数,如对int型,它总占32位,这就保证了Java的平台无关性。6.类型转换在C、C+中,可以通过指针进行任意的类型转换,常常带来不

27、安全性, 而Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的 转换。7.头文件C、C+中用头文件来声明类的原型以及全局变量、库函数等,在大的系 统中,维护这些头文件是很困难的。而Java不支持头文件,类成员的类型和访 问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操作。同时,Java中用import语句来与其它类进行通讯,以便使用它们的方法。8.结构和联合C、C+中的结构和联合中所有成员均为公有,这就带来了安全性问题。 Java中不包含结构和联合,所有的内容都封装在类中。9.预处理C、C+中用宏定义来实现的代码给程序的可读性带来了困难。在Java中不支

28、持宏,它通过关键字final来声明一个常量,以实现宏定义中广泛使 用的常量定义32.3 JAVA语言在网络上的应用Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。在编程处理上,一般先生成一个URL类型的对象,然后用 Java中相应的方法(method)获取该对象所代表的资源。如何开发一个Server-Client模型的程序 第一步客户端与服务器端的连接 服务器端通过指定端口接收用户请求,收到连接请求后,与客户端进行连接,根据客户端的请求类型做出响应。客户端则发送连

29、接请求或信息请求与服务器端进行通讯。开发原理: 服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。 第二步多个客户同时连接 在实际的网络环境里,同一时间只对一个用户服务是不可行的。一个优秀的网络服务程序除了能处

30、理用户的输入信息,还必须能够同时响应多个客户端的连接请求。在java中,实现以上功能特点是非常容易的。 设计原理: 主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。运用Thread类或Runnable接口来实现是不错的办法。 第三步 实现信息共享:在Socket上的实时交流 网络的伟大之一也是信息共享,Server可以主动向所有Client广播消息,同时Client也可以向其它Client发布消息。下面看看如何开发一个可以实时传递消息的程序。 设计原理: 服务器端接受客户端的连接请求,同时启动一个线程处

31、理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。2第三章总体设计本章主要介绍了该系统在需求分析以及总体设计思路、功能模块、软件的工作原理等。需求分析在大多数软件系统的叙述要都会独立出一章来叙述,但出于该系统的直观性和广泛性,就把它拿到这里来叙述,增强可读性。3.1 需求分析聊天系统主要包含服务器端和客户端两个方面。而这两个方面所要完成的任务不同。服务器端的任务主要为:.服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。服务器端应当是一个信息

32、发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。.服务器端应当将处理过程中需要持久化的数据保存到数据库中,以及实时的从数据库中提取所需数据。而客户端应该完成的工作主要包括:与服务器端建立通信通道,向服务器端发送信息。接收来自服务器的信息。相对服务器而言,客户端的任务更加简单,有了以上的简单分析,不难看出,解决上述四个问题,即完成了该聊天系统的核心。3.2 设计要点聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考

33、虑好以下几个设计要点:1、实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。2、服务器端工作流程服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。3、客户端工

34、作流程客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。3.3 功能模块及设计步骤3.1.1 功能模块该系统主要包括以下功能,如图图3.1所示:图3.1功能模块图当用户第一次使用本软件时需要新注册用户。之后用户需登录并验证通以后方可以进入聊天界面,用户登录后可以与在线的用户进行聊天。刚进入的聊天界面默认的是与多个或单个用户聊天,查看在线用户信息,选择某个用户进行私聊或者屏蔽某个用户的发言在自己界面的显示。此外,本系统还充许用户修改其本人的用户信息,诸如:用户名,头像,个性签名等,当然也有用户密码修改功能。3.1.2 设计步骤、数据

35、库设计表1-1 user_qq表IdNameSexIconMemoPwd1SophieF01一路风尘19850321WilliamM31开心就好19860101由于在整个聊天系统中,都是围绕用户来操作,所以这个网络聊天程序只设计了一个表。鉴于时间及能力有限,该系统只实现了比较简单的一些功能,因而本系统只设计了几个关键的字段为程序所使用,如上表1-1所示。、界面开发当前腾讯QQ的流行让我在界面开发方面的主界面以效仿其群聊界面为主,而私聊可以通过右键点击用户打开。但界面不会有太复杂。、业务逻辑该系统中我采用C/S模式,C/S模式的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提

36、交给服务器。对应的优点就是客户端响应速度快。、服务器端使用采用多线程接收用记发来的请求,每接到一个新用户的登录或注册请求,服务器端开一个新的线程来处理这个请求并生成响应返回给一定的用户,并根据需要来访问数据库。、客户端负责发出请求,并实时接收服务器端发出的响应。是用户直接操作的程序。第四章详细设计与实现本章先说明了该系统的运行和开发环境,以及核心功能的具体实现过程和所用的主要技术。最后描述了该系统的测试流程和运行结果。4.1 开发环境基于JAVA聊天系统的设计主要运用JAVA与语言与Socket类结合而开发。其开发的主要环境包括:服务器端:(Windows平台)首先应有java环境jdk,建议

37、采用jdk1.5以上,另外还需配置classpath环境变量,添加数据库MySQL及数据操作技术组件Hibernate运行所需要的jar包,本系统开发工具为MyEclipse6.0.1;客户端:只要有java环境jdk就可以,建议jdk1.5。本系统运行环境所需的硬件环境为: 中央处理器(CPU) :Intel(R) Pentium(R) processor 1.60GHz硬 盘:40GB以上硬盘;内 存:512 DDR内存;显示器:17寸显示器等;显 卡:128M显存显卡软件环境:Windows XP、MyEclipse_6.0、jdk-6u14-windows-i586、MYSQL 5.0

38、.18、Hibernate 3.1等。4.2 核心功能实现4.2.1 Socket的简介Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个socket建立连接,客户端通过写socket来通知服务器,以读socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上

39、的其他连接请求。服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。41.三次握手的:第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,在向目的主机发送一个带有两次连接的序列号的确认。具体过程如下图4.1所示:ACK=1第一次握手,主机A向主机B发送连接请求第二次握手,主机B收到主机A的请求,向主机A回发一个确认,同时向主机A发送一个连接请求第三次握手,主机A收到主机B发送的数据包在向主机B发送一个确认连接SYN=1

40、,SEQ主机A 主机B: ACK=1,SYN=1,SEQ=aaaaaaaaaa图4.1 Socket连接图2.Socket工作原理(1)聊天系统工作原理图聊天系统的工作原理是,一个服务器通过TCP连接多个客户端,如图4.2所示:图4.2数据传输原理图(2)TCP/IP协议进行传输数据传输的过程:应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP 数据包封装在IP包内,通过网络送给目的TCP。接收方TCP在接收到数据后通知上层应用程序,TCP将保证接收数据的正确性。在实现TCP的主机上,TCP可以被看成是一个模块,和文件系统区别不大,TCP 也可以调用一些操作系统的功能,T

41、CP不直接和网络打交道,控制网络的任务由专门的设备驱动模块完成。TCP只是调用IP接口,向TCP提供所有TCP需要的服务。(3)端口号:有的时候,一个ip地址不能完整的标识一台服务器,这是应为一台物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是 端口。端口实际是一个16位长的 地址,他的范围是065535之间,其中01023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都只道的,102465535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的个客户端应用程序。在数据传输过程中,各种服务器不断

42、的检测分配给他的端口,一边发现要求和他通信的客户端。4.2.2 服务器与客户端之间的通信1、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。2、数据通信:利用虚拟连接通道传送数据信息进行通道。3、关闭:通信结束时,再将所建的虚拟连接拆除。通信过程我们可以用下图4.来概括,而具体的细节我们用下一节的流程图来说明。服务器客户端1服务器socket2监听4接收5读6写7关闭3客户端socket6写5读7关闭发送连接请求 连接失败发送数据接收数据图4.3服务器与客户端之间的通信过程4.2.3 流程图本次毕设的核心功能是服务器端与客户端之间的通信。而服务器端与客户端的

43、实现是不同的。我们分别用流程图来说明。服务器端:服务器端开始会有一段程序来随时监听用户的请求,如图4.4所示:图4.4服务器主程序说明:1.服务器刚开启后,会初始化某些必要的设置,诸如数据连接对象和Socket连接端口号等。这两个配置都不会硬编码到程序中去,而是写到相应的配置文件中,使得以后更换不同数据库时方便修改。2.初始化成功后,程序会用上一步生成的ServerSocket对象的accept()方法生成一个Socket对象对客户端进行监听。这段代码会放到一个循环里,保证每个同户都能得到响应。3.服务器每接到一个请求连接会创建一个新的线程来服务该用户。多线程的引入为多个用户同时访问该服务器提

44、供了技术上的支持。新的线程也是由一个循环来监听消息请求,如图4.5所示:图4.5服务线程说明:1.新的线程运行后,进入一个循环程序,并被由Socket对象创建的输入流阻塞,直到用户发来消息请求。服务器会通过不同的消息请求交给不同的方法做出处理,并给对用户做出响应。2.线程的销毁同样需要用户发来退出请求,释放资源,并通知其它用户。但是实际情况中经常会出现客户端异常断线的情况。这样服务器端就不会正常释放资源,这样服务器端运行一段时间后就会资源不足。有两种办法可以解决这个问题:一是让服务器定时发送消息确认用户在线,另一个方法是服务器超时断线。客户端:客户端也需要创建一个线程来接收,流程图如图4.6所

45、示:图4.6客户端主程序说明:1.与服务器不同,客户端的初始化需要有服务器的IP和对应程序的端口号。同样也不能硬码到程序中,需要放到配置文件中。2.为了能够同时收发数据,客户端也需要重新创建一个线程。该线程的关闭需要主线程来调用子线程关闭程序来关闭。新创建的线程响应程序与服务器端的服务程序类似,不同的是客户端与服务器连接后要接收服务器端发来的所有在线用户列表,初始化其好友。如图4.7所示:图4.7客户端接收响应线程说明:该线程的需要注意的地方是,线程的销毁是由创建该线程的父线程发出命令来销毁的。4.3 功能模块的测试本次毕设的编译环境,及编写平台为java。主要用到的类为包中的Socket类和

46、javax.swing包中的类。服务器线程在程序运行期间一直有效,接受客户端请求信息,转发客户端聊天内容,查看用户信息。客户端运行时先进入登录界面如图4.8所示,在登录界面我们可以直接登录以前注册好的帐号,也可以点击“注册”按钮进入注册界面来注册新的用户。图4.8 登录界面说明:该界面是客户端运行的第一个界面,用户可以直接登录,将信息发送到服务器端验证,若输入不合法、数据库中没有该用户或密码错误等,会弹出一个提示窗口进行提示。注册界面如图4.9所示图4.9 注册界面说明:注册界面中用户需要输入基本信息,但性别在该系统中不是关键信息,可不予填写。当用户登录后我们就进入了聊天聊天程序的主界面,如图

47、4.10所示,此时我们就可以和所有在线用户群聊天,也可以右击某个用户选择和其私聊图4.10 聊天界面说明:1.这是该系统的主界面,登录到这个界面后,用户即可与其它用户进行聊天,同时其它用户也会接到该用户上线的通知。同样,某个用户下线的时候,服务器也会将信息发给其它用户,做到了人性化的一面。2.该界面右面的树形用户列表,我们可以右击用户名查看用户信息,也可以屏蔽该用户的发言在本地的显示。3.该部分还加入了其它组件,如字体设置、表情等,但由于种种原因,目前程序上还没实现其功能。在主界面中我们还可以点击用户名来修改自己的信息和密码如图4.11所示图4.11 个人信息修改界面说明:通过该界面用户可以查

48、看或修改自己的信息。总结本毕业设计实现了简单的实时聊天功能,经过细心的调试和排错解决了绝大部分的问题。但几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。即使是作为操作系统的各种版本的Windows也时常会发生许多类型的错误和漏洞。本聊天系统程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此至今还有许多未能解决的缺陷。目前本聊天系统还有待完善的功能列表如下:1.聊天系统缺乏在线访客列表;2.聊天系统缺乏各种表情选择、屏蔽发言、播放音乐、踢人、悄悄话聊天室等功能;3.功能仍过于简单,没有考虑会员功能,也缺少自建聊天室功能;4.也没有详细考

49、虑聊天室管理功能;5.文件传输功能还尚未实现。尽管毕业设计到现在已接近尾声,但是对于上述的缺陷,本人还会不断对聊天系统进一步的完善它,期望在今后的日子里凭借自身的技术把系统做成一套深受欢迎的聊天系统。致谢紧张而忙碌的毕业设计就要结束了,在完成了系统的功能设计后,我感到由衷的喜悦和自豪。在我做毕业设计期间,许多老师,同学和朋友给我我无私的关怀和帮助,在此,我要向他们表示衷心的感谢。首先,我要感谢学校的老师在毕业设计期间给了我悉心的关怀与帮助,并且给了我许多关键的,建设性的指导。这次的毕业设计让我受益匪浅。可以这样说,用计算机来解决繁重而低效的手工管理工作,计算机发展史上的必然。在理论课的学习中,

50、我掌握了基础课和专业课的理论知识,也曾经做过一些程序设计的联系和计算机综合试验,但真正动手设计一个管理软件,还是第一次。在这次的毕业设计中,我曾遇到了许多困难,而在克服这些困难的过程中,我的各方面的能力又有了很大的提高,使我的理论知识更好的与实践相结合,增强了专业技能的可实践性。从调研,需求分析到查找资料,结构设计,详细设计以及调试程序,到最后的写使用说明书,我终于设计出了一个比较完整的,周密的,可使用的聊天系统。通过这次的毕业设计,我真正了解了软件工程设计的整个过程,既巩固了以前的理论知识,也为我以后的工作奠定了良好的基础。当然,由于时间的短促,我所完成的系统并不是尽善尽美的,还有待进一步的

51、修改和完善。最后,请允许我再一次向毕业期间无私帮助过我的老师,同学和朋友表示最衷心的感谢。参考文献1 Bruce Eckel.Java2 编程思想M.机械工业出版社,2002 年9月2 W.Richard Stevens.JAVA网络编程M.东南大学出版社,2001年3月3 印雯. Java语言与面向对象程序设计M.清华大学出版, 2000年09月4 卡尔弗特,多纳霍.Java Tcp/IP Socket编程M. 机械工业出版社,2009年5 霍顿.Java2入门经典(JDK5)M. 机械工业出版社,2006年4月6 Swing ,David M.Geary.Java图形设计M. 机械工业出版

52、社, 2000 年2月7 Bil Lewis Daniel J.Berg.深入学习:Java多线程编程M. 电子工业出版社,2000年12月8 夏昕 曹晓钢 唐勇.深入浅出HibernateM. 电子工业出版社,2005年9 刘长炯.MyEclipse6Java开发中文教程M.电子工业出版社,2007年12月10 TunaTugcu Ero Gelenbe M.Ufuk CaglaYan Fatih AlagozM .New Trends in Computer Networks. 2005年10月01日11 Leen Ammeraal.Computer graphics for Java P

53、rogrammersM. Wiley, 2006 年12月12 MartinFowler.Refactoring: Improving the Design of Existing CodeM. 中国电力出版社, 2003 年8月13 阎宏.Java与模式M.电子工业出版社, 2002年10月1日附录服务器端部分核心代码:package com.cyb.qq.service.main;import .*;import java.io.*;import java.util.*;import com.cyb.qq.service.dao.UserDao;import com.cyb.qq.serv

54、ice.dao.UserDaoImHbn;import com.cyb.qq.service.entity.*;public class ServerMainClass public static UserDao userDao;public static Map userMap;public static Properties pro;/ 初始化配置参数/* * 静态初始化方法。 * */public static void init() pro = new Properties();try pro.load(new FileInputStream(server_config.txt); c

55、atch (IOException e) System.out.println(找不到配置文件或配置文件格式不正确!);e.printStackTrace();userDao = new UserDaoImHbn();userMap = new HashMap();public static void main(String args) init();ServerSocket ss = null;Socket s = null;try ss = new ServerSocket(Integer.parseInt(pro.getProperty(ServerPort);while (true)

56、s = ss.accept();new ServerThread(s).start(); catch (IOException e) e.printStackTrace();package com.cyb.qq.service.main;import .*;import java.io.*;public class ServerThread extends ThreadSocket s;protected ServerThread(Socket s)this.s=s;public void run()try new ServerController(s).handle(); catch (Ex

57、ception e) e.printStackTrace();finallytrys.close();catch(IOException e)package com.cyb.qq.service.main;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .Socket;import java.util.*;import com.cyb.qq.service.dao.UserDao;import com.cyb.qq.service.entit

58、y.*;public class ServerController private User user;private Socket s;private UserDao dao;private ObjectInputStream ois;private ObjectOutputStream oos;private OnlineUser onlineUser;public ServerController(Socket s) super();dao = ServerMainClass.userDao;this.s = s;public void handle() throws Exception

59、 ois = new ObjectInputStream(s.getInputStream();oos = new ObjectOutputStream(s.getOutputStream();System.out.println(s);System.out.println(ois);System.out.println(onlineUser);System.out.println(dao);onlineUser = new OnlineUser(ois, oos);while (true) Request req = (Request) ois.readObject();ois.read()

60、;RequestType type = req.getType();if (type.equals(RequestType.exit) System.out.println(000000000000000000000000000000: + exit);exitHandle();break; else if (type.equals(RequestType.login) System.out.println(000000000000000000000000000000: + login);loginHandle(req); else if (type.equals(RequestType.register) System.out.println(000000000000000000000000000000:+ register);registerHandle(); else if (type.equals(RequestType.offline) System.out.println(000000000000000000000000000000:+ offline);offlineHand

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!