简单文件传输系统的设计与实现
2015-06-30赵娟
赵娟
[摘要]文章论述了一个基于CS(客户服务器)模型的简单文件传输系统的设计与开发。系统从功能上分为客户端和服务器两部分,客户端和服务器之间的通信是通过Socket套接字流來实现。实现的功能分别是:文件的上传及下载;网络传输部分主要实现服务器和客户端的连接建立、握手通信协议通信、文件列表的传输。
[关键词]Java;客户/服务器模型;文件传输;Socket
[DOI]1013939/jcnkizgsc201550242
1引言
21世纪是网络的时代,是信息的时代,是多媒体的时代。互联网技术的迅猛发展与普及,推动了世界范围的信息传输和信息交流。文件传输是互联网上使用较多的服务之一,用户可以通过与互联网相连的计算机,从互联网获得自己需要的文件。现在,已经有许多互联网站点都建立了可供大众访问的资料库,这些资料都可以通过一定的数据传输协议被用户获取。目前已有FTP、Socket、P2P等多种网络数据传输通信协议,并产生了像CuteFTP、Flashget、迅雷等一批优秀的文件传输软件。但是使用FTP、P2P协议进行文件传输需要服务器端进行复杂的配置或者运行特殊的软件才能进行,Socket是基于客户/服务器模型的TCP/IP网络通信协议,它只需通过一个IP地址和端口号就可以在服务器和客户程序之间建立稳定的数据传输通道,操作和配置都比较简单。
2Socket工作原理
Socket是计算机进行通信的端口,是TCP协议应用程序设计中的一个重要概念。我们建立的网络通信程序实际上可以看作不同机器中的不同的两个应用程序之间的通信,收发传递信息我们必须知道对方的准确位置。
Socket通信机制提供了两种通信方式:有连接方式和无连接方式,分别面向不同的应用需求。使用有连接方式,通信链路提供了可靠的全双工的字节流服务,在该方式下,通信双方必须创建一个连接过程并建立一条通信链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此连接过程。使用无连接方式时,其系统开销比连接方式要小,但通信链路提供了不可靠的数据服务,不能保证信源所传输的数据一定能到达信宿,在该方式下,通信双方不必建立一个连接过程和一条通信链路,网络操作在不同的主机和进程之间转发进行。
图1Socket通信的原理
3文件传输系统的设计与实现
Java的Socket支持类:Socket和ServerSocket类库位于javanet包中,ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
服务器端功能模块主要在类Host Servers里定义,它实现了本系统服务器的大部分功能;客户端功能模块主要在类Custom Servers里定义,实现了客户端的多数功能;客户端和服务器端公共模块,如文件的收发、服务状态的设置等,则放在它们的父类AbstractNetServers中作实现,以提高代码的复用性。
用户界面部分目的是实现用户界面元素的组织及对用户界面元素的事件处理,调用网络传输相关部分,实现文件的上传及下载。用户界面部分根据显示内容可以分为:主窗口、菜单和工具栏、用户面板(主要是根据客户端和服务器端不同,显示不同的用户界面组件内容)及文件列表显示几个部分,这几个部分的内容都使用J2SE标准GUI库Swing组件包的控件实现。
系统的GUI部分分为3个模块:菜单和工具栏模块、模式选择模块和文件列表显示模块,以及一个启动类Main Frame。Main Frame类是整个程序的入口类,其中包含了Java启动的main方法。在这类中主要是底层用户窗口框架的初始化。菜单和工具栏模块功能主要是在类Menu And Toolbar类里实现。这个类里按照Swing添加菜单和工具栏的方法,对程序的菜单栏和工具栏进行初始化,并添加菜单栏和工具栏控件的事件监听器和实现相应事件的处理方法。文件列表显示模块主要功能都在类File Tree Panel中,主要是用来显示本机的文件系统结构和服务器共享目录的文件结构,供用户作一些选择操作。
整个系统的体系结构如图2所示:
4结论
本文讨论了使用Java的Socket接口开发一个简单文件传输系统的设计与实现,在一个程序内对系统的客户端和服务器端进行开发,最终实现了文件的上传、下载,文件列表的网络传输等一个文件传输系统的基本功能,并且同时实现了客户端和服务器端在运行时的动态切换。系统在开发过程中还有一些不足,希望在以后更加完善。
参考文献:
[1]谢安明,邵美珍使用Socket设计网络通讯程序[J].信息工程大学学报,2001(1):156-158
[2]何进,谢松巍基于Socket的TCP/IP网络通讯模式研究[J].计算机应用研究,2001(8):123-125
[3]曾雅琳,郭斌基于Java的GUI设计与实现[J].计算机与现代化,2005(10):213-214
[4]张云鹏,杨景常基于TCP/IP协议的单片机系统以太网通讯设计与实现[J].西华大学学报(自然科学版),2004(S1):234-238