您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 飞鸽传书(java版)
目录1绪论....................................................11.1本程序的开发背景........................................11.2开发环境................................................11.3Java语言................................................11.4关于Eclipse............................................22程序结构和设计思想......................................42.1本文解决的主要技术问题..................................42.2程序设计结构............................................42.3程序设计思想............................................53程序分析和具体实现......................................73.1目录选择器..............................................73.2重要图形界面模块的实现.................................103.3任务栏托盘图标和任务栏弹出对话框.......................173.4信息收发和文件传输的实现...............................213.5使用外部程序包.........................................283.6发布程序...............................................331绪论1.1本软件的开发背景当今,是一个信息高度发达的时代,计算机无疑已经成为网络通信的主角,生活节奏的加快,使得人们对通信速度的要求越来越高。对于在局域网内的计算机之间的数据交互,尤其是文件传输,通常,人们习惯于通过借助于移动存储介质,采取重复拷贝的方式来实现。这种传统文件传输方式存在诸多缺点,比如:1.消耗时间长,反复拔插存储介质过程繁琐;2.文件交互频繁,加速了计算机病毒的传播;3.虽然可以通过操作系统实现在局域网内的数据共享,但终因操作困难而使人们望而却步。在如此多困难之下,人们不禁会考虑,能不能通过软件来实现计算机之间的数据交互?答案是肯定的。本程序将针对这些问题进行设计。1.2开发环境操作系统:MicrosoftWindowsXP程序语言:Java2开发包:Java(TM)2StandardEdition(6.0)开发平台:Eclipse3.0+SwingDesigner+JRE6.01.3Java语言Java平台演进到Java2后,分别针对不同领域的需求被分成三个版本,亦即J2EE、J2SE、J2ME。本程序使用J2SE。J2SE是Java的标准版本(Java2StandardEdition),定位在客户端,主要用于桌面应用软件的编程。J2SE包含那些构成Java语言核心类库。Java语言区别于其它编程语言的特点主要有:(1)平台无关性(2)安全性(3)面向对象(4)分布式(5)键壮性本程序中,突出体现了Java语言的面向对象编程的特点,将对象实例化的模式贯穿到了程序设计的始终,而且严格按照Java语言的跨平台特性设计程序,完全摆脱了windows操作系统的束缚。1.4关于EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具JDK。虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。图1-1为Eclipse3.0的编程界面。图1-1Eclipse3.0的编程界面2程序结构和设计思想2.1本程序需要解决的主要技术问题1.提供友好的用户界面2.实现信息收发3.实现文件传输和文件夹传输4.为程序添加系统托盘图标5.保存用户设置信息2.2程序设计结构本程序按照功能可分为两个层:界面层和网络通信层。其中界面层主要采用JavaSwing编程技术编写用户界面,网络通信层采用JavaSocket技术编写数据交互程序。随程序的容量不断扩大,在同一个目录下存放所有的代码和执行文件,显得十分混乱,加大了不必要的工作量。因此,为了方便代码和其他资源文件的管理,本程序将所有的代码文件按功能分为一下几个功能包,它们实现的功能分别为:networker包:构建本程序的主窗体和系统托盘图标networker.about包:提供用户帮助信息,介绍程序设计的相关信息networker.component包:包含程序设计中几个重要的自定义功能组件networker.directorychooser包:实现目录选取对话框networker.panels包:包含了主面板设计中需要用到的区域面板networker.panels.filepane包:用于创建主面板中的文件发送区networker.system包:完成本程序网络通信networker.taskbardialog包:构建任务栏弹出对话框2.3程序设计思想网络编程的基本模型就是客户机到服务器模型,简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置。并去建立两者之间的联系,然后完成数据的通讯。这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端。目前,在互联网上比较常见的聊天软件通常都将程序分成两个部分使用,即客户机程序和服务器程序。客户机程序在网上发布供用户使用而服务器程序则只供服务器使用,一般不公开。采用这种模式可以方便管理员对所有用户进行管理,但它必须单独提供一台计算机作为服务器。而对于在局域网内使用的聊天软件,由于计算机的数量有限,而且计算机之间的服务关系经常变化或者根本没有服务关系,采用这种模式就显得力不从心了。所以,综合考虑上述因素,本程序在服务关系上做了作了一个新的设计,就是将客户机程序和服务器程序绑定在同一个软件上。当程序启动时,服务器程序监听各自端口,只负责接受来自客户机的信息并向客户机发送文件,客户机程序只负责向服务器发送信息并接受来自服务器的文件。Java对C/S模型的支持有很多种API,本程序中运用的JavaSocket编程包含两个方面:一是基于UDP协议的JavaDatagramSocket和JavaDatagramPacket,二是基于TCP/IP协议的JavaSocket和JavaServerSocket。JavaDatagramSocket/DatagramPacket是java.net包中用于UDP通信协议的类,其中DatagramSocket称为报文套接字,主要用于创建UDP通信中的报文套接字并发送报文,DatagramPacket称为数据报,主要用于装载用户即将发送的报文。Java中运用这两个类进行UDP通信,实现快速的不可靠的简单数据传输。本程序中收发用户消息和系统消息的工作都由它们来完成。JavaSocket/ServerSocket是java.net包中用于TCP/IP通信协议的类,其中Socket称为客户机套接字,用于创建客户机程序,ServerSocket称为服务器套接字,用于创建服务器。Java中运用这两个类进行TCP/IP通信,实现面向数据链接的可靠数据传输,本程序中收发文件(文件夹)都是由这两个类来完成的。由于计算机之间利用JavaSocket进行的信息收发和文件传输事先是没有约定,要完成这些工作必须在程序中制定一个协议。本程序采用发送命令字的方式通知计算机完成相应工作,具体实现本文将在后面的章节中作具体介绍。3程序分析和具体实现3.1目录选择器在当前所有版本的JDK中,都没有实现过windows风格的目录选取对话框,本程序考虑到保存文件的需要,重新定义了一个类似功能的目录选取对话框,并具有跨平台特性。其效果图如图3-1:图3-1目录选择器实现目录选择器的类文件配置在networker.directorychooser包中,其中包含3个类:(1)TreeCell类TreeCell类封装了一个java.io.File类,并分别通过4个方法返回了该File对象的文件名、文件图标、文件路径、File类本身。其构造函数如下:publicTreeCell(Filef)(2)DCTreeCellRenderer类DCTreeCellRenderer类重构了树形组件的节点UI,它继承自javax.swing.JPanel,并实现了TreeCellRenderer接口,重写方法:publicComponentgetTreeCellRendererComponent(JTreetree,Objecto,booleansel,booleanex,booleanleaf,introw,booleanfocus)(3)DirectoryChooser类DirectoryChooser实现了目录选取对话框的主体,它继承自javax.swing.JDialog类,并实现了接口ActionListener,TreeExpansionListener,其中最重要的组件是树形组件,它把文件系统所有目录以树形结构转化为节点显示出来,用户可以很方便的在树形组件中浏览到文件系统中的所有目录。在DirectoryChooser中有几个方法是十分重要的,它们分别是:树选择事件:publicvoidvalueChanged(TreeSelectionEventtse)树展开事件:publicvoidtreeExpanded(TreeExpansionEventee)初始化桌面:publicvoidinitDesk()为父节点添加子节点:publicvoidaddChild(DefaultMutableTreeNodenode)这里重点指出显示对话框并获取用户选择的路径:程序为DirectoryChooser类定义了两个静态变量//判断用户是否点了“确定”按钮publicstaticbooleanCHOOSE_FLAG=false;//提取用户选取的路径publicstaticStringDIRECTORY_PATH=null;显示对话框时,界面的阻塞状态,等待用户的相关操作,当用户点击“取消”或者是对话框关闭按钮时,CHOOSE_FLAG的值设为false,除了对话框退出以外,不进行任何操作,反之当用户点击“确定”按钮时,设为true,DIRECTORY_PATH的值被设定为相应的路径值,实现语句如下:显示对话框:publicbooleanShowDialog(){setVisi
本文标题:飞鸽传书(java版)
链接地址:https://www.777doc.com/doc-4410099 .html