(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现_第1页
(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现_第2页
(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现_第3页
(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现_第4页
(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

I基于Java的局域网飞鸽传书软件的设计与实现【摘要】为了方便内部网络的用户之间的沟通,我们需要开发一个基于局域网的信息共享工具。本课题设计主要针对局域网通讯而开发设计的,采用的是C/S构架,类似飞鸽传书系统,来实现聊天、文件传输功能。本设计以JAVA编写,能在windows2000/net/xp等环境下运行。设计共分为五大部分,分别是:1.选题背景及意义和国内外研究现状;2.TCP/IP点对点协议技术,C/S架构和SOCKET网络编程技术;3.对系统进行需求分析并提出解决方案;4.根据解决方案设计系统;5.测试系统并得到测试结果。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第1页。【关键词】聊天传输socket飞鸽传书C/S结构JAVA(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第1页。DesignandImplementationIPMessengerBasedonLANandJavaTechnology【Abstract】Inordertofacilitateinternalcommunicationbetweennetworkusers,weneedtodeveloponetooltoshareinformation.Thistopicdesignmainlyaimsatthelocalareanetworkcommunication,usetheC/Sstructure,likeIPmessenger,forchatandfilestransmission.ThissystemisdevelopedbyJAVAandcanrunintheinvironmentofwindows2000/net/xp.Thedesignaltogetherdividesintofivebigparts,respectivelyis:1.Selectedtopicbackgroundandsignificance,domesticandforeignresearchpresentsituation;2.TCP/IPpointtopointprotocoltechnology,C/Sstructureandsocketnetworkprogrammingtechnology;3.Analyzethedemandofthissystemandproposethesolution;4.Accordingtothesolutionwedesignthesystem;5.Testthesystemandobtainsthetestresult.【Keywords】chattransmissionsocketIPmessengerC/Sstructurejava(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第2页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第2页。目录TOC\o"1-4"\h\z\u绪论 11研究内容 21.1TCP/IP 21.2主要研究思路和方法 31.3研究系统的目的以及意义 31.4Javasocket 32系统需求分析 92.1系统设计目标 92.2系统总体需求分析 92.3组织结构的分析 92.3.1开发运行环境 102.3.2系统开发语言 103 系统开发分析 113.1C/S软件架构技术 113.2用户数据报协议(UDP) 113.3单播、广播、组播浅析 114 系统设计 134.1文字聊天模块的整体构架 134.2文件传输模块的主要流程图 134.3系统主要功能模块 14(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第3页。4.3.1系统的主登录界面 14(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第3页。4.3.2文字聊天信息的封装 164.3.3文件传输的界面 185 系统测试 245.1测试环境 245.2测试结果 24结论 27参考文献 28附录 29致谢 34(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第4页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第4页。PAGE37绪论当人类进入到崭新的21世纪后,网络通讯在当今已不算新鲜事物,当今世界的主题也转变为了以知识和信息为主的新时代。信息的需求量和运算量的不停增加,使得计算机通信技术有了突飞猛进的变化。网络的使用频率和使用的范围都越来越广泛,但是人们使用网络的用途主要有两个:(1)相互之间的沟通,(2)资源共享。局域网作为网络的一个重要组成部分,它不但是用户与外界环境连接的枢纽,同时也是近距离用户之间沟通与资源共享的一个重要途径。在这种前提下,如何使局域网内的用户能够进行便捷的沟通,以及得到快速的资源共享,也就成为了人们研究网络问题的重点之一。目前大多数网络通讯都需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成许多问题,如浪费网络资源、遭到网络攻击、传播病毒、破坏防御系统等等。互连网上的网络通讯工具给企业内部信息交流带来了不便,所以为了方便内部网络用户之间的沟通,需要开发一个基于局域网的信息收发系统的即时通讯工具,实现内部网络的信息交流。本系统是参考目前比较流行的局域网即时通讯软件“飞鸽传书”的基础上开发设计的,是一个局域网内的通迅工具,主要通过socket完成。它据有的主要功能有以下两点:(1).局域网内用户间简单的文字聊天功能。(2).局域网内用户间相互的文件、文件夹传输。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第5页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第5页。1研究内容1.1TCP/IP随着计算机技术和通讯技术的飞速发展,计算机网络化已经渗透到各行各业,尤其是以TCP/IP协议之间的网络互连发展速度很快,计算机应用系统的开发方向已经由传统的单机方式转向到了网络环境的开发。网络之间每台计算机进行数据通讯时,都是使用具体地址来标识网络中的计算机,只有有了地址以后,数据才会准确地发送到地址所指向的计算机。TCP/IP协议使用IP地址为网络中计算机的标识,而且每台计算机的IP地址是唯一的,一般情况下,每台计算机运行的程序不止一个,因此要在应用程序中建立连接的话,还需要一个地址标识。[11](计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第6页。TCP/IP传输控制协议/网际协议,是internet最基本的协议。供已连接因特网的计算机进行通信的通信协议。TCP/IP在私网中,它也被用作通信协议。当你直接网络连接时,你的计算机应提供一个TCP/IP程序的副本,此时接收你所发送的信息的计算机也应有一个TCP/IP程序的副本。TCP/IP是一个两层的程序。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。网络上的网关计算机根据信息的地址来进行路由选择。即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。TCP/IP使用客户端/服务器模式进行通信。TCP/IP通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。在TCP/IP协议中使用了端口(PORT)作为计算机上运行的应用程序的标识,因此TCP/IP协议中一个有效的网络地址包括IP地址和端口地址两个部分。TCP/IP协议提供两种计算机之间进行通讯的方式:TCP方式和UDP方式。[11](计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第6页。TCP是当应用程序要得到完整且可信赖的数据时所采用的传输控制协议,是一种面向连接的服务,TCP会在传输的过程中多了许多确认的动作以确定数据的正确性。在文件传输时会先行建立连接,通过链接提供双向、有序且无重复的数据流服务、以及流量控制、差错检测和纠错等服务,从而确保文件传输的正确性;而UDP比起TCP是要简单许多,UDP是一种无连接的服务,它在传输文件时不会确保传输端的文件能够正确无误的传送到接收端,所以UDP传输数据通常会遗失却不见得再重新传输一次,所以当使用UDP时,通常要自己作接收确认的工作。因此使用UDP的应用程序着重于简洁和效率以完成工作,它不需要像TCP一般复杂的手续就可以达到交换信息的目的。[11](计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第7页。飞鸽传书是由日本人ShirouzuHiroaki发明的免费软件,是一款局域网内基于TCP/IP(UDP)的即时通信软件。该软件不需要服务器支持可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。该软件支持文件/文件夹的传送,目前已有的版本包括:Win32,Win16,MacOS,MacOSX,X11,GTK,GNOME,Java等,并且公开源代码。飞鸽传书目前最新版本是飞鸽传书2010,绿色软件,体积小巧,无需安装。它支持文字通讯,文件(夹)传输,语音视频,远程控制等多媒体功能。具有群聊、多人语音、多人视频、网络会议室等专业即时通讯软件功能。可局域网用户自动搜索,也可架设服务器进行统一管理。局域网,互联网均可使用,内外网互通,可与联信UM/Gmail/Jabber等XMPP标准通信服务器互通。飞鸽传书中文版Ver2.06由阿志于2004年11月制作,是一款飞鸽传书的经典版本。它支持局域网文字通讯,文件(夹)传输局域网用户自动搜索,简单快捷,仅适用于局域网使用。[10](计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第7页。1.2主要研究思路和方法本系统的开发采用基于Javasocket的广播发送模式,进行文字聊天和文件、文件夹传输的设计与开发。因此,本设计首先分析该系统的相关功能,结合本设计的相关要求写出需求分析;其次,综合运用以前所学的相关知识,选择所熟悉的开发工具进行本设计的开发;在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;最后,在系统开发完毕后,进行调试和运行,做好调试和运行的相关记录。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第8页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第8页。1.3研究系统的目的以及意义随着互联网技术的迅猛发展,网络给人们带来了非常多的便利,比如人们借助于网络进行相互交流已经变得越来越方便。聊天工具作为互联网中运用最为广泛的通信工具之一,如今都已被广大网民所接受和喜爱。很多人都使用过飞鸽传书软件,尤其对于需要在局域网内进行大量数据传输的人来说,飞鸽传书软件备受亲睐。飞鸽传书发展到现在已经具有了很多功能:有文字聊天、文件、文件夹传输的基本功能,也有密封、加锁等较为复杂的功能。本毕业设计的目的主要是为了检查使学生综合运用以前所学知识(包括以前所学的一些关于网络、编程、信息安全等知识)的能力,模拟局域网飞鸽传书软件,开发一个基于Java的飞鸽传书局域网通信软件,本毕业设计主要实现局域网内文字聊天及文件传输等功能。本设计中程序用Java编写,能在Windows2000/net/xp等环境下运行。主要研究的内容有:TCP/IP点对点协议技术,C/S架构和SOCKET网络编程技术,对当前局域网文件传输进行需求分析并提出解决方案和对解决方案进行设计,完成局域网内用户间文字聊天功能,完成局域网内用户间相互的文件、文件夹传输功能,对工作计划统计以及分析系统进行测试并得到测试结果。[10]1.4JavaSocketsocket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第9页。以J2SDK-1.3为例,Socket和ServerSocket类库位于包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第9页。重要的SocketAPI:.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法。.Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。.getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。.getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。例如开发一个Server-Client模型的程序。它的开发原理如下:服务器:使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第10页。客户端:使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第10页。{建立服务器}import.*;importjava.io.*;publicclassServer{privateServerSocketss;privateSocketsocket;privateBufferedReaderin;privatePrintWriterout;publicServer(){try{ss=newServerSocket(10000);(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第11页。while(true)(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第11页。{socket=ss.accept();in=newBufferedReader(newInputStreamReader(socket.getInputStream()));out=newPrintWriter(socket.getOutputStream(),true);Stringline=in.readLine();out.println("youinputis:"+line);out.close();in.close();socket.close();}ss.close();}(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第12页。catch(IOExceptione)(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第12页。{}}publicstaticvoidmain(String[]args){newServer();}}这个程序建立了一个服务器,它一直监听10000端口,等待用户连接。在建立连接后给客户端返回一段信息,然后结束会话。这个程序一次只能接受一个客户连接。客户端:使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第13页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第13页。{建立客户端}importjava.io.*;import.*;publicclassClient{Socketsocket;BufferedReaderin;PrintWriterout;publicClient(){try{socket=newSocket("xxx.xxx.xxx.xxx",10000);in=newBufferedReader(newInputStreamReader(socket.getInputStream()));(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第14页。out=newPrintWriter(socket.getOutputStream(),true);(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第14页。BufferedReaderline=newBufferedReader(newInputStreamReader(System.in));out.println(line.readLine());line.close();out.close();in.close();socket.close();}catch(IOExceptione){}}publicstaticvoidmain(String[]args){newClient();(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第15页。}(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第15页。}这个客户端连接到地址为xxx.xxx.xxx.xxx的服务器,端口为10000,并从键盘输入一行信息,发送到服务器,然后接受服务器的返回信息,最后结束会话。[9](计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第16页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第16页。2系统需求分析2.1系统设计目标根据对飞鸽传输系统的调查研究,本设计主要需要满足以下几个系统设计目标:(1).可靠性原则:必须为用户提供安全可靠的服务,尤其是要保证数据传输的稳定性。(2).实用性原则:按照真正为局域网的实际工作服务的要求,按照需求的大小,合理地设计本系统。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第17页。(3).友好性原则:考虑到本系统的使用人群大众化,所以本系统操作上要求简单方便,便于用户掌握,界面上争取做到简洁美观。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第17页。(4).可扩展性原则:本系统采用开放的标准和接口,方便于以后系统向更大的规模和功能扩展。[1]2.2系统总体需求分析根据需求分析,本系统分为两个子系统:(1).局域网内简单文字聊天子系统,它是在局域网内选择相应的用户,以便对之发送文字信息。(2).文件、文件夹传输系统,它是在先把需要传输的文件、文件夹转换成相应的数据流进行传输,到了目的主机再进行还原。本系统的文字聊天子系统实现的功能类似于QQ、MSN用户之间的聊天。在设计系统时,应根据简洁、流畅的特点安排布局,在编制程序时应充分考虑数据传输的稳定、快捷,真正做到“简洁、高效、流畅、安全”的使用环境。用户使用的过程大致为:用户开启本软件,软件自动检索局域网的其它用户,显示用户列表,用鼠标可以任意选择用户列表里面的用户。当发现需要连接某个用户之后,双击该用户,则弹出对话窗口。用户可以在这里发送消息或者文件。作为接收方的话,可以选择接收或者拒绝相应的传输文件。2.3组织结构的分析组织结构图如图1所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第18页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第18页。 图1组织结构图2.3.1开发运行环境开发运行本系统所需要的软、硬件环境为:(1).Pentium100及以上档次的IBMPC及其兼容机;(2).Windows95、Windows98或WindowsNT/2000/XP;(3).1G以上可用硬盘空间;(4).128M以上内存措施;(5).显示器;(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第19页。以上的配置要求为同一局域网内的计算机两台或两台以上。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第19页。2.3.2系统开发语言本系统是在WindowsXP操作系统下,采用eclipse开发工具,使用Java语言开发的。Java是一种很优秀的编程语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。是目前软件设计中极为壮健的编程语言,Java的诞生是对传统计算机模式的挑战,对计算机软件开发和软件产业都产生了深远的影响。Java作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、安全性、并且提供了并发的机制,具有很高的性能。其次,Java还提供了丰富的类库涉及加解密、消息摘要等,使程序设计者可以很方便地调用这些方法进行二次开发。另外,在JDBC诞生之后,Java在数据库应用领域获得了成功的应用,大大降低了Java语言操作数据库的复杂程度,可以将重心放在功能实现上。[3]3系统开发分析(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第20页(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第20页。3.1C/S软件架构技术C/S(Client/Server)结构,即大家熟知的客户机/服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。[6]3.2用户数据报协议(UDP)UDP(UserDatagramProtocol):用户数据包协议,它和TCP一样位于传输层,和IP协议配合使用,在传输数据时省去包头,但它不能提供数据包的重传,所以适合传输较短的文件。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第21页。由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用UDP的“端口号”完成的。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少,所以UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。[8](计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第21页。3.3单播、广播、组播浅析硬件组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址(broadcastaddress)来进行广播投递,它的主要缺点是会耗费大量的主机资源和网络资源。单播(unexacting)是指只有一个目的地的数据报传递。从投递目的地的数量而言,单播和广播均可看作是组播的一个子集。单播可以看作仅包括一台机器群组的组播;广播可以看作包含了所有机器群组的组播。但从数据报的投递方式而言,单播、广播和组播还是有较大的区别。[8](计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第22页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第22页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第23页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第23页。4系统设计4.1文字聊天模块的整体构架本系统文字聊天是采用C/S结构,所以每个客户端也作为服务器端,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。(1).发送模块:单播模块,广播模块,用户信息模块,信息记录模块。(2).接收模块:接收信息模块,查看信息模块。综上所述,系统的架构图如图2所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第24页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第24页。图2系统架构图4.2文件传输模块的主要流程图由于本模块采用C/S架构故将系统运行载体分为两个部分:客户端与服务器端。文件传输需要建立有效的连接后,通过TCP/IP协议实现点对点的文件传输。通信双方是通过三次握手建立连接,实现文字、文件传输,最后关闭套节字连接。整个流程图如图3所示:图3系统流程图4.3系统主要功能模块4.3.1系统的主登录界面(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第25页。由于系统的用户设计是针对的用户日常活动,而非专门从事计算机操作的人员,所以本系统力求界面友好、简单,以便给用户提供一个舒适的使用环境。在文字聊天模块的主要目标是简捷方便。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第25页。为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个ListView来进行显示如图4,在ListView中包括了用户名、工作组、用户级数等。当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。登录界面,如图4所示:图4启动主界面(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第26页。在发送时将会把信息发送给在局域网内部的所有用户包括自己。选择用户并输入发送信息,单播发送的按钮为jmmenuitem8,主要是通过IdUDPServer和IdUDPClient组件来编写的,由client.SendBuffer语句来发送的,主要是对局域网内部的同一工作组用户发送信息。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第26页。广播发送的按钮为jmmenuitem9,主要是通过IdUDPServer和IdUDPClient组件来编写的,主要是使用了client.Broadcast来对信息,如图5所示:图5用户选择图(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第27页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第27页。其中主要的代码为:privatevoidjMenuItem2ActionPerformed(java.awt.event.ActionEventevt){//GEN-FIRST:event_jMenuItem2ActionPerformed//TODOaddyourhandlingcodehere: intselectLen; if((selectLen=this.guiUserList.getSelectedIndices().length)<1){ this.GuiTips.setText("请选择用户!"); return; }elseif(selectLen==1){ Userusr=GlobalVar.getUser((String)this.guiUserList .getSelectedValue()); UtilityGui.showNotice(this,"昵称:"+usr.getName() +GlobalVar.NEW_LINE+"ip:"+usr.getIp() +GlobalVar.NEW_LINE+"组别:"+usr.getGroup() +GlobalVar.NEW_LINE+"主机:"+usr.getHost()); }else{ Object[]o=this.guiUserList.getSelectedValues();(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第28页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第28页。 StringBuffersb=newStringBuffer(); sb.append("昵称:ip:组别:主机"+GlobalVar.NEW_LINE); for(inti=0;i<o.length;i++){ usr=GlobalVar.getUser((String)o[i]); sb.append(usr.getName()+":"+usr.getIp()+":" +usr.getGroup()+":"+usr.getHost() +GlobalVar.NEW_LINE); } UtilityGui.showNotice(this,sb.toString()); } }//GEN-LAST:event_jMenuItem2ActionPerformed4.3.2文字聊天信息的封装封装是一种把多次聊天的的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用.(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第29页。程序插件自动生成封装功能。并且在聊天过程中,封装的过程仍在持续,聊天的内容是边封装数据包边传输。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第29页。发送信息接收界面,如图6所示图6接收界面其中实现的主要代码为:publicclassMsgDaemonServerextendsThread{publicMsgDaemonServer(){/*try{UtilityNet.msgSocket=(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第30页。newDatagramSocket(GlobalConstant.IPMSG_DEFAULT_PORT);(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第30页。}catch(SocketExceptionex){}*/}@Overridepublicvoidrun(){try{byte[]buf=newbyte[GlobalConstant.COMMAND_LEN];DatagramPacketrecv=newDatagramPacket(buf,buf.length);CommandtmpCom;while(true){UtilityNet.msgSocket.receive(recv);if(GlobalVar.BLACK_LIST.contains(recv.getAddress().getHostAddress()))continue;byte[]buf2=newbyte[recv.getLength()];System.arraycopy(recv.getData(),0,buf2,0,recv.getLength());(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第31页。if((tmpCom=Command.createCommand((计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第31页。buf2,recv.getAddress().getHostAddress()))!=null){//System.out.println("2"+recv.getAddress().getHostAddress());GlobalVar.COMMAND_QUEUE_EMPTY.acquire();//System.out.println("3"+recv.getAddress().getHostAddress());GlobalVar.pushCommand(tmpCom);GlobalVar.COMMAND_QUEUE_fULL.release();}}}catch(SocketExceptionex){}catch(IOExceptionex){}catch(InterruptedExceptionex){}}(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第32页。}(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第32页。4.3.3文件传输的界面和聊天功能一样,我们也要求界面尽量地简单,便于操作。与聊天功能不一样的是文件与文件夹的传输的安全性和速度要求比较高,本系统的简单加锁功能在局域网这种比较单一的环境下能够实现。文件传输的过程中流程为首先客端的主机通过TCP/IP协议建立链接,然后客户机发送套节字请求,通过3次握手连接响应,再转换数据为socket流传送,最近通过3次握手断开连接响应。选择用户并拖入相应所要传送的文件及文件夹,如图7所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第33页。图7文件传输界面(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第33页。点击所发送的文件为文件另存为,界面如图8所示:图8选择存储路径(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第34页。选择路径确定后,文件开始传输。其传送界面,如图9所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第34页。图9文件传输中其中实现的主要代码为://发送目录privatevoidsendDir(FileLinkListflist,FileNodefnode){//System.out.println("进入目录"+fnode.getFileName());if(this.sendDir(newFile(fnode.getFileName()))){fnode.setIsTransfered(true);(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第35页。flist.setActive(false);(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第35页。if(flist.isTanstered()){GlobalVar.delFileList(flist.getPacketNo());}}elseflist.setActive(false);}privatebooleansendDir(Filefile){if(file==null||(!file.isDirectory()&&!file.isFile()))returnfalse;//if(file.isDirectory())System.out.println("发送目录:"+file.getPath());//elseSystem.out.println("发送文件:"+file.getPath());if(!this.sendSubDir(file))returnfalse;if(file.isDirectory()){File[]subdir=file.listFiles();inti,count=subdir.length;for(i=0;i<count;i++)if(!this.sendDir(subdir[i]))returnfalse;if(!this.sendSubDir(null))returnfalse;}(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第36页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第36页。}privatebooleansendSubDir(Filefile){try{this.outputStream.write(this.createHeader(file).getBytes(GlobalVar.CHARACTER_ENCODING));if(file!=null&&file.isFile()){if(!this.sendFile(file.getPath()))returnfalse;}returntrue;}catch(IOExceptionex){returnfalse;}}privateStringcreateHeader(Filefile){Stringres;if(file==null){res=":.:0:"+Integer.toHexString(GlobalConstant.IPMSG_FILE_RETPARENT)+//"00000003"+(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第37页。":0:";(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第37页。}else{res=":"+file.getName()+":"+Long.toHexString(file.length())+":"+//"000000000:"+(file.isDirectory()?Integer.toHexString(GlobalConstant.IPMSG_FILE_DIR):Integer.toHexString(GlobalConstant.IPMSG_FILE_REGULAR))+":0:";}try{returnUtilityGlobal.dec2Hex(res.getBytes(GlobalVar.CHARACTER_ENCODING).length+8)+res;}catch(UnsupportedEncodingExceptionex){returnnull;}}//发送文件(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第38页。privatevoidsendFile(FileLinkListflist,FileNodefnode){(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第38页。if(this.sendFile(fnode.getFileName())){fnode.setIsTransfered(true);flist.setActive(false);if(flist.isTanstered()){GlobalVar.delFileList(flist.getPacketNo());}}elseflist.setActive(false);}privatebooleansendFile(StringfilePath){try{DataInputStreamfis=newDataInputStream(newBufferedInputStream(newFileInputStream(filePath)));byte[]buf=newbyte[GlobalConstant.DEFAULT_F_LENGTH];intread=0;while(true){if(fis!=null){(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第39页。read=fis.read(buf);(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第39页。}if(read==-1){break;}this.outputStream.write(buf,0,read);}this.outputStream.flush();fis.close();returntrue;}catch(SocketExceptione){returnfalse;}catch(IOExceptione){returnfalse;}}privatevoidexit(){try{this.inputStream.close();(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第40页。this.outputStream.close();(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第40页。this.socket.close();}catch(IOExceptionex){}}}(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第41页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第41页。5系统测试5.1测试环境在同一局域网内的主机两台或以上,主机的最低配置:CPUPIII8000,内存SDRAM64M,主机系统WIN2000/XP/2003.建议用户CPUPIII,内存256M及以上。5.2测试结果在上述软硬件环境下对此系统各个子模块功能作出测试,结果基本能够达到预期功能。下面为系统运行截图:系统主界面,如图10所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第42页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第42页。图10系统主界面选择用户窗口,如图11所示:图11用户选择窗口(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第43页。聊天窗口,如图12所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第43页。图12聊天窗口发送文件窗口,如图13所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第44页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第44页。图13发送文件窗口选择要传输的文件,如图14所示:(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第45页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第45页。图14选择文件接收文件,如图15所示:图15接收文件(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第46页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第46页。结论随着互联网技术的飞速发展,网络给人们带来了诸多的方便。在信息沟通和资源共享方面局域网以其快捷的速度和优异的准确率始终占有一席之地。局域网内的文字聊天以及文件、文件夹的传输的工具早已经为人们所创造、熟悉和使用。本系统的主要工作:1.了解开发系统的流程,把握需求分析,掌握系统的功能需求。2.根据系统的核心功能“文字聊天和文件共享”做好系统分析。3.借鉴其它相关的优秀软件,取长补短,在系统开发时可以少走弯路。4.收集资料、参考文献,为系统实现做准备。5.设计完成系统软件。选择适当的设计软件,主要用到Javasocket控件的功能。由于个人开发设计能力有限,系统还存在一些其它的技术性问题,还需在今后的工作实践中不断总结和改善,增强自身开发能力。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第47页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第47页。参考文献[1]梅兴文译.[美]RogersCadenhead.Java编程入门经典.第4版.北京:人民邮电出版社,2007[2]王路群.Java高级程序设计.北京:中国水利水电出版社,2006[3]陈轶、姚晓昆.Java程序设计实验指导.北京:清华大学出版社,2006(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第48页。[4]赵文靖.Java程序设计基础与上机指导.北京:清华大学出版社,2006(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第48页。[5]赵毅.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,2006[6]雍俊海.Java程序设计习题集.北京:清华大学出版社,2006[7]朱福喜.Java语言习题与解析.北京:清华大学出版社,2006[8]丁振凡.Java语言实用教程.北京:北京邮电大学出版社,2005[9]Java8.三步学会JavaSocket编程.[10]/[11]谢希仁.计算机网络.北京:电子工业出版社,2008(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第49页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第49页。附录:其中主要的代码为:1:privatevoidjMenuItem2ActionPerformed(java.awt.event.ActionEventevt){//GEN-FIRST:event_jMenuItem2ActionPerformed//TODOaddyourhandlingcodehere: intselectLen; if((selectLen=this.guiUserList.getSelectedIndices().length)<1){ this.GuiTips.setText("请选择用户!"); return; }elseif(selectLen==1){ Userusr=GlobalVar.getUser((String)this.guiUserList .getSelectedValue());(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第50页。 UtilityGui.showNotice(this,"昵称:"+usr.getName()(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第50页。 +GlobalVar.NEW_LINE+"ip:"+usr.getIp() +GlobalVar.NEW_LINE+"组别:"+usr.getGroup() +GlobalVar.NEW_LINE+"主机:"+usr.getHost()); }else{ Object[]o=this.guiUserList.getSelectedValues(); Userusr; StringBuffersb=newStringBuffer(); sb.append("昵称:ip:组别:主机"+GlobalVar.NEW_LINE); for(inti=0;i<o.length;i++){ usr=GlobalVar.getUser((String)o[i]); sb.append(usr.getName()+":"+usr.getIp()+":" +usr.getGroup()+":"+usr.getHost() +GlobalVar.NEW_LINE); } UtilityGui.showNotice(this,sb.toString());(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第51页。 }(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第51页。 }//GEN-LAST:event_jMenuItem2ActionPerformed2:publicclassMsgDaemonServerextendsThread{publicMsgDaemonServer(){/*try{UtilityNet.msgSocket=newDatagramSocket(GlobalConstant.IPMSG_DEFAULT_PORT);}catch(SocketExceptionex){}*/}@Overridepublicvoidrun(){try{(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第52页。(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第52页。DatagramPacketrecv=newDatagramPacket(buf,buf.length);CommandtmpCom;while(true){UtilityNet.msgSocket.receive(recv);if(GlobalVar.BLACK_LIST.contains(recv.getAddress().getHostAddress()))continue;byte[]buf2=newbyte[recv.getLength()];System.arraycopy(recv.getData(),0,buf2,0,recv.getLength());if((tmpCom=Command.createCommand(buf2,recv.getAddress().getHostAddress()))!=null){//System.out.println("2"+recv.getAddress().getHostAddress());GlobalVar.COMMAND_QUEUE_EMPTY.acquire();(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第53页。//System.out.println("3"+recv.getAddress().getHostAddress());(计算机专业-毕业论文)基于Java的局域网飞鸽传书软件的设计与实现全文共60页,当前为第53页。GlobalVar.pushCommand(tmpCom);GlobalVar.COMMAND_QUEUE_fULL.release();}}}catch(SocketExceptionex){}catch(IOExceptionex){}catch(InterruptedExceptionex){}}}3://发送目录privatevoidsendDir(FileLinkListflist,FileNodefnode){//System.out.println("进入目录"+fnode.getFileName());if(this.sendDir(newFile(fnode.getFileName()))){fnode.setIsTra

温馨提示

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

评论

0/150

提交评论