java毕业论文----基于JAVA局域网聊天程序设计与实现+源码(要源码的后留言)+英语文献及翻译_第1页
java毕业论文----基于JAVA局域网聊天程序设计与实现+源码(要源码的后留言)+英语文献及翻译_第2页
java毕业论文----基于JAVA局域网聊天程序设计与实现+源码(要源码的后留言)+英语文献及翻译_第3页
java毕业论文----基于JAVA局域网聊天程序设计与实现+源码(要源码的后留言)+英语文献及翻译_第4页
java毕业论文----基于JAVA局域网聊天程序设计与实现+源码(要源码的后留言)+英语文献及翻译_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 i摘摘 要要随着互联网的发展,网络聊天工具作为一种交流工具,已经受到网民的青睐。目前,出现了很多功能强大的聊天工具,其中应用比较广泛的有腾讯 QQ、MSN-Messager 等等。即时通讯软件,是每一个上网用户都需要的工具,它除了能够让您迅速地在网上找到自己的朋友和伙伴之外,还可以实时交谈和传递信息,截止到目前,全球约有近3 亿多人使用即时软件,正因为即时通讯软件拥有数以亿计的用户和增长的市场,所以各个公司都盯上了这个最大的市场,一时间,即时通讯市场硝烟四起。对等网络(peer-to-peer,简称 P2P),应用最初出现时和现在并不相同。事实上可以认为它是若干不同技术以及流行趋势相结合的产

2、物。以下是导致 P2P 技术发展最重要的趋势:首先,一些新技术与软件工程的结合,形成了一种将工作分散的趋势。P2P 计算正是这种分散工作趋势的结果。其次,在企业应用集成等因素的驱动下,过去十年渐渐形成从集中的单机系统转向分布式系统。然而随着互联网的发展,全面的分布式计算也就成为一种迫切需求。关键词:局域网 聊天 P2P javaiAbstractWith the development of the Internet,the chat tool as a communication tool, has been popularly accepted by netizens of all age

3、s. At present, there are many powerful chat tools, of which Tencent QQ, MSN-Messager are much more prevalent.Instant messaging software is necessary for every one who connects to the internet, which can not only provide you a prompt way to find friends and partners online, but can provide you the co

4、nvenience of internet relay chat and information delivering. Up to now, there are about 300 million people using real-time software all over the world. As more and more corporations have focused on this market with growing potential, which has hundreds of millions of uses, the competitions among the

5、se corporations are extremely fierce. The initial application of peer-to-peer network (peer-to-peer, referred to as P2P) is not the same as it is now. In fact, it can be regarded as a combination of different technologies and fashion trends. Below are the most important trends that have led the deve

6、lopment of P2P technology: First of all, the integration of software engineering and new technologies led to a working dispersion trend. As a result, P2P computing was born. Then, in the past decade, it has turned fro m a single centralized system to distributed system due to the motivation of facto

7、rs such as enterprise application integration. At last, with the development of the Internet, however, a comprehensive distributed computing has become an urgent need.iiKeywords: LAN chat P2P java目目 录录摘摘 要要 .iAbstract .ii1 1绪论绪论.11.1JAVA 的网络功能与编程11.1.1 JAVA 概述.11.1.2 JAVA 的特点.31.1.3 JAVA 语言在网络上的应用.6

8、1.2 JAVABEANS技术61.3 IP/TCP 协议常识61.4 SOCKET的简介71.5 对等网络81.5.1 对等网络发展历史.81.5.2 对等网络的概念.91.5.3 对等网络的主要系统结构.92 2 JAVAqqJAVAqq 局域网聊天程序的需求分析局域网聊天程序的需求分析.132.1 课题来源132.2 需求分析133 3 JAVAqqJAVAqq 局域网聊天程序的系统分析与设计局域网聊天程序的系统分析与设计.153.1 JAVAQQ局域网聊天程序的总体设计要点153.2 JAVAQQ局域网聊天程序的设计步骤及功能模块划分153.3 JAVAQQ局域网聊天程序各功能模块16

9、4 4 JAVAqqJAVAqq 局域网聊天程序的设计与实现局域网聊天程序的设计与实现.244.1 开发环境工具244.2 硬件环境24工程技术学院毕业设计(论文)专用纸i4.3 聊天系统功能模块的测试24结结 论论.28致致 谢谢.30参考文献参考文献.31附录附录 A A 程序源代码程序源代码.32工程技术学院毕业设计(论文)专用纸1 绪论绪论 随着互联网逐步普及,互联网技术的逐步提高。人们的工作和生活也越来越离不开网络,而即时聊天是人们最常见、最直接的 online 交流的方式。本系统以聊天功能为主,通过网络为用户提供一个人际交流的平台。本文所介绍的网络聊天系统是基于 JAVA 编程语言

10、开发设计的,其主要特性是能动态、实时的完成消息的传递,且具有高效的交互性,能更有效的处理客户请求,其运行时所需环境及工作流程和各模块的工作原理将在本文依次介绍,并且文中提供了全部程序源代码。1.1 JAVA 的网络功能与编程1.1.1 JAVA 概述Java 是一个由 Sun 公司开发的新一代高级编程语言。它可在各式各样不同机器、不同操作平台的网络环境中开发软件。不论你使用的是哪种 WEB 浏览器,哪种计算机,哪种操作系统,只要 WEB 浏览器上面注明了“支持 Java”,并且装有 JAVA 控件,你就可以看到生动的主页。Java 正在逐步成为 Internet 应用中最主要的开发语言,它彻底

11、改变了软件开发模式,带来了自 PC 机以来又一次革命,为飞速发展的网络世界增添了新的动力。Sun 的 Java 语言开发小组成立于 1991 年,Sun 内部人员把这个项目称为Green。该小组的领导人是 James Gosling,是一位非常杰出的程序员。在研发过程中,Gosling 深刻体会到消费类电子产品和工作站产品的差异:消费类电子产品要求可靠性高、费用低、标准化、使用简单。Gosling 在开始写 Java 时,并不局限于扩充语言机制本身,更注重于语言所运行的软硬件环境。他要建立一个系统,运行于一个巨大的、分布的、异构的网格环境中,完成各设备之间的通信与协同工作。Gosling 在设

12、计中采用了虚机器码方式,即 Java 语言编译后产生虚拟机,虚拟机运行在一个解释器上,每一个操作系统均有一个解释器。这样一来,Java 就成了跨平台语言。Patrick Naughton 也是 Sun 公司的技术骨干,曾经是 OpenWindows 项目的负责人。当 Naughton 加入该小组后,工作进展神速。经过 17 个月的奋战,整个系统胜利完成。它是由一个操作系统、一种语言、一个用户界面、一个新的硬件平台、三块专用芯片构成的。通常情况下,这样的项目在 Sun 公司要 75 个人干三年。项目工程技术学院毕业设计(论文)专用纸完成后,在 Sun 公司内部做了一次展示和鉴定,观众的反应是:在

13、各个方面都采用了崭新的、大胆的技术。到了 1994 年,internet 已如火如荼地发展起来。Gosling 意识到 internet需要一个浏览器,它不依赖于任何平台,它应是一种实时性较高、可靠安全、又有交互功能的浏览器。于是 Gosling 决定用 Java 开发一个新的 Web 浏览器。Java 虽出现的时间不长,但已完全被业界接受,IBM、Apple、Silicon Graphics、HP、Oracle、Toshiba、Netscape 和 Microsoft 等大公司已经购买了Java 的许可证。Microsoft 还在其 Web 浏览器 Explorer3.0 版中增加了对 Ja

14、va 的支持。众多的软件开发商也开发了许多支持 Java 的软件产品。如:Borland 公司的基于 Java 的快速应用程序开发环境 Latte;Metrowerks 公司和 Natural Intelligence 公司分别开发的基于 Machintosh 的 Java 开发工具;Sun 公司的Java 开发环境 JavaWorkshop;Microsoft 也开发出系列 Java 产品。数据库厂商如Sybase,Oracle 等都在开发支持 HTML 和 Java 的 CGI。Intranet 正在成为企业信息系统最佳的解决方案。它的优点表现在:便宜、易于使用和管理。用户不管使用何种类型

15、的机器和操作系统,界面是统一的 Web 浏览器,而数据库、Web 页面、应用程序则存在 WEB 服务器上。未来的计算方式,每个 HomePage 的实质是一个多媒体应用程序,这些程序用Java 来开发。Java 应用程序运行在不同的机器、不同的操作系统之上,甚至于电冰箱、烤面包箱、防盗电子设备之中,用 Internet 把所有的电子设备连接起来,通过 TCP/IP 进行信息的交流。Java 的出现是计算机信息交换的一个重要里程碑。在单机时代,程序进程之间靠共享存储进行变量交换;在网络时代,运行在不同主机上的程序按网络协议进行二进制字符流交换,语义由交换双方维护;在 Java 时代,运行在网络上

16、的程序进程交换的是小应用程序。随着 Internet 的崛起、Java 的诞生,巨型而臃肿的应用软件开始向小型化发展,由众多生活在 Internet 上的小应用程序相互协作完成信息的处理与传递。Java 会加速应用软件的小型化、网络化的趋势。随着互联网的发展,软件必然是面向大众的,薄利多销将是网络应用软件的重要特点。信息的价值在于使用和共享,Internet 和 Web 是信息的使用和共享最快捷、最便宜的方式,Word 将演化成为Web 写作工具,Excel 则将演化成 Web 电子表格。工程技术学院毕业设计(论文)专用纸1.1.2 JAVA 的特点(一)JAVA 的主要特点Java 语言有下

17、面一些特点:简单、面向对象、分布式、解释执行、 安全、体系结构中立、可移植、高性能、多线程以及动态性。1.简单Java 语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务。Java 略去了运算符重载、多重继承等模糊的概念,且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。2.面向对象Java 语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。3.分布性Java 是面向网络的语言。通过它提供的类库可以处理 TCP/IP 协议,用户可以通过

18、 URL 地址在网络上很方便地访问其它对象。4.安全性用于网络、分布环境下的 Java 必须要防止病毒的入侵。Java 不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用 “特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。5.体系结构中立Java 解释器生成与体系结构无关的指令,Java 程序可在任意的处理器上运行。这些指令对应于 Java 虚拟机中的表示,Java 解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。6.可移植性与平台无关的特性使 Java 程序可以方便地被移植到网络的不同机器上。另外,Java 编译器是

19、由 Java 语言实现的,Java 运行时系统由标准 C 实现,这使得 Java 系统本身也具有可移植性。7.解释执行Java 解释器直接对 Java 字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。工程技术学院毕业设计(论文)专用纸8.高性能和其它解释执行的语言如 BASIC 不同,Java 字节码的设计使之能很容易地直接转换成对应于特定 CPU 的机器码,从而得到较高的性能。9.多线程多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地

20、实现网络上的实时交互行为。10.动态性Java 的设计使它适合于一个不断发展的环境。在类库中可以自由地加入 新的方法和实例变量而不会影响用户程序的执行。并且 Java 通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。(二)丰富的类库 Java 提供了大量的类以满足网络化、多线程、面向对象系统的需要。1.语言包提供的支持包括字符串处理、多线程处理、例外处理、数学函数处理等,可以用它简单地实现 Java 程序的运行平台。2.实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。3.输入输出包用统一的流模型来实现所有格式的 I/O,包括文件系统、 网络、输入4.低级网络包

21、用于实现 Socket 编程。5.抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得 Java 可以移植到不同平台的机器。6.网络包支持 Internet 的 TCP/IP 协议,提供了与 Internet 的接口。它支持URL 连接,WEB 即时访问,并且简化了 C/S 模型的程序设计。1.1.3 JAVA 语言在网络上的应用Java 程序可以获取网络上结点的图象、声音、HTML 文档及文本等资源,并可以对获得的资源进行处理。在编程处理上,一般先生成一个 URL 类型的对象,然后用 Java 中相应的方法获取该对象所代表的资源。 1.2 Ja

22、vaBeans 技术JavaBeans 就是 Java 的可重用组件技术。JSP 通过 JavaBeans 来扩充复杂的功能,如文件上载、发送 email 以及将业务处理或复杂计算分离出来成为独立可重复利用的模块。JSP 对于在 Web 应用中集成 JavaBeans 组件提供了完善的支持。这种工程技术学院毕业设计(论文)专用纸支持不仅能缩短开发时间,也为 JSP 应用带来了更多的可伸缩性。 JavaBeans 组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据提取等。由于JavaBeans 开发起来简单,又可以利用 Java 语言的强大功能,许多动态页面处理过程实际上被封装到了 J

23、avaBeans 中。1.3 IP/TCP 协议常识(1)IP/TCP 协议的特点:TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写, TCP/IP 是当今网络互联的核心协议。TCP/IP 协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。IP 协议的作用:第一,它是网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。TCP/IP 协议具有以下特点:1、协议标准具有开

24、放性,其独立于特定的计算机硬件及操作系统,可以免费使用。2、统一分配网络地址,使得每个 TCP/IP 设备在网络中都具有唯一的 IP 地址。3、实现了高层协议的标准化,能为用户提供多种可靠的服务。(2)TCP/IP 协议进行传输数据传输的过程:应用程序为了传输数据会调用 TCP,将数据和对应的参数传给 TCP,将 TCP 数据包封装在 IP 包内,通过网络送给目的 TCP。接收方 TCP 在接收到数据后通知上层应用程序,TCP 将保证接收数据的正确性。TCP 调用 IP 接口,向 TCP 提供所有TCP 需要的服务。(3)端口号:有的时候,一个 IP 地址不能完整的标识一台服务器,这是应为一台

25、物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是端口。端口实际是一个 16 位长的 地址,他的范围是 065535 之间,其中 01023 是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都只道的,102465535 为一般端口,也称动态端口、连接端口,用来随时分配要求通信的客户端应用程序。在数据传输过程中,各种服务器不断的检测分配给他的端口,一边发现要求和他通信的客户端。 工程技术学院毕业设计(论文)专用纸1.4 Socket 的简介Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是

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

27、在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。2、数据通信:利用虚拟连接通道传送数据信息进行通道。3、关闭:通信结束时,再将所建的虚拟连接拆除。具体如下:Socket 套接字原理图 1 服务器 socket2 监听4 接收5 读6 写7 关闭3 客户端 etsocket6 写5 读7 关闭工程技术学院毕业设计(论文)专用纸1.5 对等网络1.5.1 对等网络发展历史对等网络(peer to peer,简称 P2P)应用最初出现时和现在并不相同。事实上可以认为它是若干不同技术的产物。下面是两个导致 P2P 技术发展最重要的趋势:首先是某些新技术与软件工程结合,形成一种将工作分散的

28、趋势。P2P 计算正是这种分散工作趋势的必然结果。其次从工程的角度看来,在企业应用集成等因素的驱动下,过去十年渐渐形成一种从集中系统转向分布式系统的趋势。对功能强大的网络计算机的需求以及昂贵的带宽开销,是对这种趋势影响最大的两个因素。为了提高效率,P2P 计算由许多互相连接的同位体组成。除了技术方面之外的社会因素也是一个重要原因。毫无疑问,人们现在对 P2P计算技术的热切关注起源于 Napster,Scour,Gnutella,以及即时通讯类的相关产品。这些产品提供了所谓的“killer apps”功能,能够将 P2P 技术中的一部分下放到客户端手中。这种第一手的体验,使得人们越来越关注 P2

29、P 技术。1.5.2 对等网络的概念目前,业界对 P2P 的定义还没有一个标准的说法,Intel 将 P2P 技术定义为“通过系统间的直接交换达成计算机资源与信息的共享” 。IBM 则把它看成是由若干互联协作的计算机构成的系统并具备如下若干特性之一:系统依存于边缘化设备的主动协作,每个成员直接从其他成员而不是从服务器的参与中受益;系统中成员同时扮演服务器与客户端的角色;系统应用的用户能够意识到彼此的存在而构成一个虚拟或实际的群体。简单地说,P2P 技术是一种用于不同 PC 用户之间、不经过中继设备直接交换数据或服务的技术。它打破了传统的 C/S 模式,在对等网络中,每个节点的地位都是相同的,具

30、备客户端和服务器双重特性,可以同时作为服务使用者和服务提供者。1.5.3 对等网络的主要系统结构PZP 模式的变化经历了集中式、分布式和混合式 3 个阶段。(1)集中式对等网络集中式 P2P 模式由一个中心服务器来负责记录共享信息以及反馈查询;每一个对等实体要对它所需共享的信息以及进行的通信负责。这种形式具有中心化的特点,但是它不同于传统意义上的 C/S 模式。集中式 P2P 模式则是所有网上提供的资料都工程技术学院毕业设计(论文)专用纸存放在提供该资料的客户机上,服务器上只保留索引信息,此外服务器与对等实体以及对等实体之间都具有交互能力。集中目录式 PZP 模型还存在很多问题,主要表现为:中

31、央服务器的瘫痪将导致整个网络的崩溃,可靠性和安全性较低:随着网络规模的扩大,中央目录服务器维护和更新的费用将急剧增加,所需成本过高;中央服务器的存在引起共享资源在版权问题上的纠纷,这也是直接导致Napster 破产的原因;缺乏有效的强制共享机制,资源可用性差。集中式 P2P 可提供中心服务器目录检索、管理服务和标准的点到点通信,具有高效的检索和低效的交换服务的特点。集中式 P2P 对小型网络而言在管理和控制方面占有一定的优势,但对大型网络并不适合。 (2)分布式对等网络在分布式 P2P 中,对等机通过与相邻对等机之间的连接遍历整个网络体系。每个对等机在功能上都是相似的,并没有专门的服务器,而对

32、等机必须依靠它们所在的分布网络来查找文件和定位其他对等机。以 Gnutella 网络为例,一台新对等机首先通过访问某特殊站点提供的主机缓存服务机制来得到一台活动对等机地址,通过与它建立一个连接将自己接入Gnutella 网络;接着,该新对等机主动探查网络中的其它对等机,找到与之相邻的对等机节点,在进行文件查找时,该对等机首先向与之相邻的所有活动对等点发送一个查询描述符 Query,在其他对等机接收到该查询描述符后,检查本地是否有符合查询请求的文件内容,如果有,则按查询描述符的发送路径返回一个查询响应描述符 QueryHit,无论本地是否存在符合查询请求的文件内容,其他对等机都会将该查询包通过扩

33、散方式继续在网络中传递,直至查询包中 TTL 属性值递减为 0 时才停止继续转发;一旦定位了响应查询文件的对等机之后,就与响应对等机建立 TCP连接,通过 HTTP 协议从响应对等机中下载自己查询的文件。文件的传输不再经过Gnutella 网络进行。分布式对等网络模型也存在很多弊端,主要表现在以下方面:搜索请求要经过整个网络或者至少是一个很大的范围才能得到结果,因此,这种模式占用很多带宽,而且需要花费很长时间才能有返回结果。随着网络规模的扩大,通过扩散方式定位对等点及查询信息的方法将会造成网工程技术学院毕业设计(论文)专用纸络流量增加,导致网络拥塞,最终使 Gnutella 网络被分片,因此,

34、网络的可扩展性不好,不适合大型网络。纯分布式的 P2P 模式很难被企业所利用,因为它缺少对网络上的用户节点数以及对他们提供的资源的一个总体把握。安全性不高,易遭受恶意攻击。这种无中心、纯分布式系统的特点是:它不再是简单的点到点通信,而是更高效、更复杂的网络通信。(3)混合 P2P 网络集中式 P2P 有利于网络资源的快速检索,并且只要服务器能力足够强大就可以无限扩展,但是其中心化的模式容易遭到直接的攻击:分布式 P2P 解决了抗攻击问题,但是又缺乏快速搜索和可扩展性。混合式 P2P 结合了集中式和分布式 P2P 的优点,在设计思想和处理能力上都得到了进一步的优化。它在分布式模式的基础上,将用户

35、节点按能力进行分类,使某些节点担任特殊的任务。这些节点共分为 3 种:用户节点:普通节点,它不具有任何特殊的功能。搜索节点:处理搜索请求,从它们的孩子节点中搜索文件列表,这些节点必须有 128 kbit/s RAM 的网络连接速度,建议使用高性能的处理器。索引节点:连接速度快、内存充足的节点可以作为索引节点。索引节点用于保存可以利用的搜索节点信息,并搜集状态信息,维护网络结构信息。在第三代 P2P 的软件体系结构中,采用了混合式 P2P。这种模式的关键之一是引入了索引节点,索引节点不会直接连接到有版权的资料上,它就像搜索引擎一样,只是搜索和所需资料相关的地址,至于用户到底连接下载了什么内容则和

36、它无关。这种模式的关键之二是引入搜索节点,搜索节点管理着所属用户的文件列表。用户节点通过索引节点获得搜索节点信息,之后用户节点就与获得的搜索节点相连,每一次查询都通过该搜索节点进行。当用户发出搜索请求后,如果和用户节点直接相连的搜索节点查询结果达到 100 个就停止;如果不足 100 个,就向相邻的搜索节点发出请求,如果查询结果还不够,就继续向外快速发散,直到所有的搜索节点都被搜索到为止。若所有的搜索节点都被访问过,就意味着整个网络上的节点都被搜索到了,其速度要比纯 P2P 模式快得多。工程技术学院毕业设计(论文)专用纸2 2 JAVAqqJAVAqq 局域网聊天程序的需求分析局域网聊天程序的

37、需求分析2.1 课题来源根据当前网络的需求,网络聊天越来越受各种网民所青睐。因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流。现在 Intranet 网络在企业中越来越流行,不需要连入广域网就实现实时消息传递的系统由于其优越的性能受到企业的青睐。本人原来学习过 JAVA 语言,对 P2P 技术以及网络编程也较有兴趣,为了更好的考验自己对 JAVA 语言的掌握程度,以及能更深入的理解P2P 技术的内涵,本人就决定以基于 JAVA 局域网聊天程序设计与实现为毕业设计,希望通过这一次的能进一步提高本人的网络

38、编程的能力。2.2 需求分析基于 P2P 的聊天系统,用户既是服务器端也是客户端。这并不同于传统的一服务器多客户端的网络结构,而是多服务器多客户端的网络结构,服务器与客户端一一绑定,数量相等。不过,从原理上看,这还是 C/S 模式。所以,我的程序大致可分为服务器模块和客户端模块来进行分析。首先介绍一下服务器模块的任务:1.服务器模块应当建立一个 ServerSocket,并且不断进行侦听是否有客户端模块连接或者断开连接。2.服务器模块监听网络上的客户端模块是否有与本机进行通信的需求。若有需求,就建立连接,接收消息,通过 ActionListener 接口进行侦听,当用户点击按钮后,启动一个聊天

39、界面,将消息通过客户端模块显示出来。以上就是服务器模块最主要的两个任务。客户端应该完成的工作包括:1.向需要通信的主机发送连接请求,若成功,通过 ServerSocket 进行连接,端口默认为 5001。2.向已建立连接的主机发送消息。3.显示本机服务器接收的信息。除此之外,本系统还讲实现群聊功能:默认 为广播地址,用 UDP 技术通过广播的方式把消息传递给局域网内每个用户的手中。从原理上讲,跟实现客工程技术学院毕业设计(论文)专用纸10户端的原理差不多,只不过这里不是点对点两人通信。工程技术学院毕业设计(论文)专用纸113 3 JAVAqqJAVAqq 局域网聊天程序的系

40、统分析与设计局域网聊天程序的系统分析与设计3.1 JAVAqq 局域网聊天程序的总体设计要点 聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:1、实现思想局域网基于 P2P 上的聊天程序一般都是以服务器模块提供连接响应,使用者通过客户端模块连接,与用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP 环境下,实现服务器和客户端两个模块的程序。2、服务器模块工作流程服务器模块通过 socket()系统

41、调用创建一个 Socket 数组后,与指定的本地端口绑定,就可以在端口进行侦听 listen()。如果有用户连接请求,则建立一个Socket,将客户端地址赋给这个 Socket。然后就可以相互传递信息了。3、客户端模块工作流程客户端程序相对简单,只需要建立一个 Socket 与服务器模块连接,成功后通过这个 Socket 来发送和接收数据就可以了。系统通过 ActionListener 接口来监听用户的对按钮的点击,来启动各聊天窗口进行相关工作,如私聊,群聊等。3.2 JAVAqq 局域网聊天程序的设计步骤及功能模块划分工程技术学院毕业设计(论文)专用纸12聊天系统工作原理图3.3 JAVAq

42、q 局域网聊天程序各功能模块1LoadingFrame(源代码见附录,下同)public void init()/登陆界面的初始化方法setTitle(登录);setIconImage(new ImageIcon(imageicon.gif).getImage();setLocation(387, 234);setSize(350,300);setVisible(true);setDefaultCloseOperation(3);loadBtn.addActionListener(this);/将“登陆”按钮加入到事件侦听器中cancelBtn.addActionListener(this);

43、/讲“取消”按钮加入到事件侦听器中nameText.addActionListener(this);/讲输入用户名的文本框加入到事件侦听器中this.setResizable(false);public void actionPerformed(ActionEvent e) if(e.getSource()=loadBtn|e.getSource()=nameText)/创建客户端主界面text=nameText.getText();new StateFrame(text);工程技术学院毕业设计(论文)专用纸13dispose();else if(e.getSource()=cancelBtn

44、)/取消登录,推出程序dispose();System.exit(0);程序的登录窗口,从此窗口中,输入用户名,点击“登陆”来初始化一个StateFrame 对象,并在显示器上显示出客户端的主界面。在后期的完善中,会完成记住用户名及自动登录功能。主要通过将用户名写入一个记事本保存起来。2StateFramepublic final static int DEFAULT_PORT=8322;/默认端口public final static int CATCH_PORT=7322;public final static int TCP_PORT=6322;/默认 TCP 连接端口public vo

45、id init()/初始化应用程序窗口friList.addActionListener(new ActionListener()/用ActionListener接口来对图形界面中的各个组件进行监听public void actionPerformed(ActionEvent e) /双击登录到列表框内容时触发的事件为连通列表框中的IP,建立TCP通信Socket socket;int s=friList.getSelectedIndex();String address=userinfos.getIP();/获取对方IPtry socket=new Socket(address,TCP_PO

46、RT);/建立连接MainChatFrame mf=new MainChatFrame(socket,userinfos.getName();/启动私聊主界面 catch (Exception e1) e1.printStackTrace(););/初始化UDP协议端口信息/首先向已在线的程序发送本机的IP以及请求响应并对相应的组播端进行监听工程技术学院毕业设计(论文)专用纸14public void JoinGroup()try group=InetAddress.getByName(); /初始化广播聊天信息组groupC=InetAddress.getByName(23

47、);/初始化登录信息组socket=new DatagramSocket();byte notify=new byte100;byte nametag=new byte20;nametag=name.getBytes();/发送一个登录信息给已登录的用户,通知他们本程序上线。/包的数据结构为:判断位+用户名+IP地扯+用户名长度notify=new String(C+name+InetAddress.getLocalHost().getHostAddress()+name.length().getBytes();packet=new DatagramPacket(notify,n

48、otify.length,groupC,CATCH_PORT);socket.send(packet);socketC=new MulticastSocket(CATCH_PORT);socketC.joinGroup(groupC);Catcher catcher=new Catcher(socketC,this,name,userinfo);CheckIn login=new CheckIn(this,userinfo); catch (Exception e) e.printStackTrace(); 用来显示用用户名及在线人的窗口,并对窗口中各组件实施监听。让其可顺利生成各个聊天主界面

49、。3Catcher/实现对组播端口的监听,并作出反映public void run()try socket=new DatagramSocket(); while(true)byte Rdata=new byte256;packet=new DatagramPacket(Rdata,Rdata.length);Csocket.receive(packet);/等待接受数据包String count=new 工程技术学院毕业设计(论文)专用纸15String(packet.getData().substring(packet.getLength()-1,packet.getLength();in

50、t num=Integer.parseInt(count); /count记录了数据包的最后一位数,也就是记录了用户名的长度。String check=new String(packet.getData().substring(1+num,packet.getLength()-1); /check为数据包的IP地址String judge=new String(packet.getData().substring(0,1);String usertag=new String (packet.getData().substring(1,num+1);if(judge.equals(C)/judg

51、e为“C”时反送一个含有对方用户名以及本机的IP的数据包到组播组public void Connect(String check) /Connect()方法实现了对对方回应本机信息的过程, /其中第一以及最后一个为无用信息,在接受方被吸收掉CheckSocket=new Socket(check,CHECK_PORT);in=new BufferedReader(newInputStreamReader(CheckSocket.getInputStream();out=new PrintWriter(CheckSocket.getOutputStream();用来对登录信息的监听,并解析传送过

52、来的数据包。4Listenerpublic void run()try while(true)byte Rdata=new byte256;packet=new DatagramPacket(Rdata,Rdata.length);/用Rdata数组来接收数据,工程技术学院毕业设计(论文)专用纸16MSocket.receive(packet);/并传给MulticastSocket对象SF.cessMsg(new String(packet.getData();SF.groupchat.setVisible(true);ring(); catch (IOExcept

53、ion e) e.printStackTrace();用来对群消息的监听及处理,将接收到的消息打包,传给MulticastSocket对象,再利用 CheckIn 和 Logon 对象进行处理。5CheckIn/对回应信息的端口的监听,一旦收到回应信息则开启一个新线程对其进行信息的接收public void run()try Check=new ServerSocket(CHECK_PORT); catch (IOException e) e.printStackTrace();try while(true)client=Check.accept();Logon ll=new Logon(sf

54、,client,userinfo);ll.start(); catch (IOException e) e.printStackTrace(); 6Logonpublic void run()/run()方法实现对回应的TCP连接的信息的接收,并且完成对UserInfo信息的保存String msg=null;Trymsg=receiveMsg();name=msg;/获取对方的名字msg=receiveMsg();ip=msg;/获取对方的IP工程技术学院毕业设计(论文)专用纸17k=sf.friList.getSelectedIndex();userinfok=new UserInfo(n

55、ame,ip);cessFriend(userinfok.getName();msg=receiveMsg();public String receiveMsg()throws IOException/接收数据String msg=new String();try msg=in.readLine(); catch (IOException e) return msg;5 和 6 主要完成对群消息的处理,5 主要完成对信息的解包,显示等等;而 6主要是对 TCP 连接的信息的接收,以及对用户信息的保存。7TCPConnectpublic void run()try listen=ne

56、w ServerSocket(port);processMsg(正在监听TCP端口);/建立TCP连接 catch (Exception e) processMsg(群聊功能仍可使用);/建立失败,不过还可以群聊while(true)Socket client = listen.accept();MainChatFrame mf=new MainChatFrame(client,name);/启动一个私聊主界面工程技术学院毕业设计(论文)专用纸18根据所得到对方的 IP 信息建立一个 TCP 连接,并启动一个私聊主界面,进行TCP 通信。8UserInfopublic class UserIn

57、fo /初始化用户信息,姓名以及IP地址,姓名是通过登录界面由用户键入的,IP/地址是程序直接由机器获取的private String name;private String IP;public UserInfo(String name, String ip) = name;IP = ip;public String getIP() return IP;public void setIP(String ip) IP = ip;public String getName() return name;public void setName(String name) this.n

58、ame = name;记录 IP 及用户名。9MainChatFramepublic void init(String name)/传入的参数为自身的用户名input.addActionListener(new ActionListener()/接收信息的监听器public void actionPerformed(ActionEvent e) try sendMsg(input.getText();processMsg(I:+input.getText();input.setText(););send.addActionListener(new ActionListener()/发送信息的监

59、听器public void actionPerformed(ActionEvent e) 工程技术学院毕业设计(论文)专用纸19try sendMsg(input.getText();processMsg(I:+input.getText();input.setText(););显示点对点聊天窗口,建立接收和发送数据的监听。10GroupChatFramepublic void eventHandle()input.addKeyListener(new KeyListener()/接收信息的监听器public void keyPressed(KeyEvent e) if(e.getKeyCha

60、r()=n)trybyte dataS=(name+:+input.getText().getBytes();sf.packet=new DatagramPacket(dataS,dataS.length,sf.group,sf.DEFAULT_PORT);sf.socket.send(sf.packet);input.setText(););sendBtn.addActionListener(new ActionListener()/发送信息的监听器public void actionPerformed(ActionEvent e) trybyte dataS=(name+:+input.g

温馨提示

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

评论

0/150

提交评论