`
forhope
  • 浏览: 365839 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

TFTP的文件管理

阅读更多
导入commons-net-1.1.0.jar。1.4版本在上传文件时上传完的文件大小总为0。
package com.network.manage.device.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.net.UnknownHostException;

import org.apache.commons.net.tftp.TFTP;
import org.apache.commons.net.tftp.TFTPClient;

public class TFTPUtil {
	private static TFTPClient tftp = new TFTPClient();

	
	public static boolean downloadFile(String hostname, String localFilename,
			String remoteFilename,int port) {
		
		// 设置超时时间为60秒
		tftp.setDefaultTimeout(60000);
		
		// 打开本地socket
		try {
			tftp.open();
		} catch (SocketException e) {
			System.err.println("无法打开本地 UDP socket!");
			System.err.println(e.getMessage());
		}
		
		boolean closed,success;
		closed = false;
        success = false;
		FileOutputStream output = null;
		File file;

		file = new File(localFilename);
		if (file.exists()) {
			System.err.println("文件: " + localFilename + " 已经存在!");
			return success;
		}

		try {
			output = new FileOutputStream(file);
		} catch (IOException e) {
			tftp.close();
			System.err.println("无法打开要写入的本地文件!");
			System.err.println(e.getMessage());
			return success;
		}

		try {
			tftp.receiveFile(remoteFilename, TFTP.BINARY_MODE, output, hostname, port);
			//tftp.receiveFile(remoteFilename, TFTP.BINARY_MODE, output, hostname);
			success = true;
		} catch (UnknownHostException e) {
			System.err.println("无法解析主机!");
			System.err.println(e.getMessage());
			return success;
		} catch (IOException e) {
			System.err.println("接收文件时有I/O异常!");
			System.err.println(e.getMessage());
			return success;
		} finally {
			// 关闭本地 socket 和输出的文件
			tftp.close();
			try {
				if (null != output) {
					output.close();
				}
				closed = true;
			} catch (IOException e) {
				closed = false;
				System.err.println("关闭文件时出错!");
				System.err.println(e.getMessage());
			}
		}
		if (!closed)
            return false;
		
		return success;
	}
	
	public static boolean uploadFile(String hostname, String remoteFilename, InputStream input ,int port) {
		// 设置超时时间为10秒
		tftp.setDefaultTimeout(10000);
		
		// 打开本地socket
		try {
			tftp.open();
		} catch (SocketException e) {
			System.err.println("无法打开本地 UDP socket!");
			System.err.println(e.getMessage());
		}
		
		boolean success,closed;
		closed = false;
        success = false;
       
		try {
			 //tftp.sendFile(remoteFilename, TFTP.BINARY_MODE, input, hostname);
			 tftp.sendFile(remoteFilename, TFTP.BINARY_MODE, input, hostname, port);
			success = true;
		} catch (UnknownHostException e) {
			System.err.println("无法解析主机!");
			System.err.println(e.getMessage());
			//System.exit(1);
			return success;
		} catch (IOException e) {
			System.err.println("发送文件时有I/O异常!");
			System.err.println(e.getMessage());
			return success;
			//System.exit(1);
		} finally {
			// 关闭本地 socket 和输出的文件
			tftp.close();
			try {
				if (null != input) {
					input.close();
				}
				closed = true;
			} catch (IOException e) {
				closed = false;
				System.err.println("关闭文件时出错!");
				System.err.println(e.getMessage());
			}
		}
		
		if (!closed)
            return false;
       
		return success;
	}
	
	public static boolean deleteFile(String hostname, String remoteFilename,int port){
		// 设置超时时间为10秒
		tftp.setDefaultTimeout(10000);
		
		// 打开本地socket
		try {
			tftp.open();
		} catch (SocketException e) {
			System.err.println("无法打开本地 UDP socket!");
			System.err.println(e.getMessage());
		}
		
		boolean success;
        success = false;
        
        try {
			 //目前没找到TFTPClient支持的删除方法,此处只把服务器上的文件更新为空
        	tftp.sendFile(remoteFilename, TFTP.BINARY_MODE, null, hostname, port);
			success = true;
		} catch (UnknownHostException e) {
			System.err.println("无法解析主机!");
			System.err.println(e.getMessage());
			//System.exit(1);
			return success;
		} catch (IOException e) {
			System.err.println("发送文件时有I/O异常!");
			System.err.println(e.getMessage());
			return success;
			//System.exit(1);
		} finally {
			// 关闭本地 socket 和输出的文件
			tftp.close();
		}
        return success;
	}
}
分享到:
评论
9 楼 knight_black_bob 2016-03-07  
start
java.io.IOException: Connection timed out.
error
end
at org.apache.commons.net.tftp.TFTPClient.receiveFile(TFTPClient.java:173)
at org.apache.commons.net.tftp.TFTPClient.receiveFile(TFTPClient.java:302)
at remote.file.watche.TFTPUtil.main(TFTPUtil.java:168)
8 楼 forhope 2011-11-24  
wangqi0614 写道
请问你有没有tftp的服务器?我用的是ciso的,能够传文件,也能在地址栏里面访问tftp://IP,我用1.0的jar包,file文件还是空的,
W/System.err( 3627): java.io.IOException
W/System.err( 3627):    at java.io.FileOutputStream.openCheck(FileOutputStream.java:320)
W/System.err( 3627):    at java.io.FileOutputStream.write(FileOutputStream.java:296)
W/System.err( 3627):    at org.apache.commons.net.tftp.TFTPClient.receiveFile(TFTPClient.java:220)
W/System.err( 3627):    at org.apache.commons.net.tftp.TFTPClient.receiveFile(TFTPClient.java:338)
W/System.err( 3627):    at com.android.contacts.NetPhoneBookActivity.parsingNetworkPhonebookRootXML(NetPhoneBookActivity.java:577)
这是提示我的错误,577行就是receive()该生成的文件都有了,我也不知道IOException是哪的问题了


恩,看起来是TFTP传输那出问题了,端口号69没有写错吧?
我这有个TFTP工具 tftpd32,既可以当服务器,也可以当客户端,要我发给你吗?
7 楼 wangqi0614 2011-11-23  
请问你有没有tftp的服务器?我用的是ciso的,能够传文件,也能在地址栏里面访问tftp://IP,我用1.0的jar包,file文件还是空的,
W/System.err( 3627): java.io.IOException
W/System.err( 3627):    at java.io.FileOutputStream.openCheck(FileOutputStream.java:320)
W/System.err( 3627):    at java.io.FileOutputStream.write(FileOutputStream.java:296)
W/System.err( 3627):    at org.apache.commons.net.tftp.TFTPClient.receiveFile(TFTPClient.java:220)
W/System.err( 3627):    at org.apache.commons.net.tftp.TFTPClient.receiveFile(TFTPClient.java:338)
W/System.err( 3627):    at com.android.contacts.NetPhoneBookActivity.parsingNetworkPhonebookRootXML(NetPhoneBookActivity.java:577)
这是提示我的错误,577行就是receive()该生成的文件都有了,我也不知道IOException是哪的问题了
6 楼 forhope 2011-11-23  
wangqi0614 写道
下载1.0的,里面都是.class的文件,我要用.java的文件,请问你有吗

这个没有,你要改源码么?
5 楼 forhope 2011-11-23  
wangqi0614 写道
TFTPClient tftp = new TFTPClient();

String localFile = "/data/data/com.android.contacts/networkphonebook.xml";
file = new File(localFile);

out = new FileOutputStream(file);

tftp.receiveFile(mPhoneBook_Filename,TFTP.BINARY_MODE, out,mPhoneBook_Server);
                   
input = new FileInputStream(file);

你好,这是我主要的代码。networkphonebook.xml这个文件已经生成了,里面是空的。
receiveFile()里面的第1和4个参数是从输入框中输入的文件名和IP,input 是我还要用到输入框中得到的文件名去解析xml,请问我上面的代码总是报receiveFile()空指针。你的回答我已经受到了,我还没试出来。。。


首先确认一下你的TFTP服务器是否正常开启?能通过TFTP工具下载相应的文件吗?

然后再看看tftp.receiveFile报错空指针的错,可能是tftp对象是否为空,建议你debug看一下。我觉得很可能是TFTP连接没有正确的建立。
4 楼 wangqi0614 2011-11-23  
下载1.0的,里面都是.class的文件,我要用.java的文件,请问你有吗
3 楼 wangqi0614 2011-11-23  
TFTPClient tftp = new TFTPClient();

String localFile = "/data/data/com.android.contacts/networkphonebook.xml";
file = new File(localFile);

out = new FileOutputStream(file);

tftp.receiveFile(mPhoneBook_Filename,TFTP.BINARY_MODE, out,mPhoneBook_Server);
                   
input = new FileInputStream(file);

你好,这是我主要的代码。networkphonebook.xml这个文件已经生成了,里面是空的。
receiveFile()里面的第1和4个参数是从输入框中输入的文件名和IP,input 是我还要用到输入框中得到的文件名去解析xml,请问我上面的代码总是报receiveFile()空指针。你的回答我已经受到了,我还没试出来。。。
2 楼 forhope 2011-11-23  
wangqi0614 写道
请问下载方法,tftp.receiveFile()连接服务器后生成了out流的一个文件,之后我想用这个文件,写上InputStream in = new FileInputStream (file);这句话后为什么总是报receiveFile()错呢?
还有就是你先前说的,为什么下载下来的文件什么都没有呢?请问你这个问题解决了吗?tftp困扰好久了。。。。


你好,第一个问题,首先请确认一下文件是否成功生成,可以的到文件的绝对路径下去找。

第二个问题,我这里是由于commons-net.jar的版本问题,文件大小为0,不是没有文件。换成commons-net-1.1.0.jar就没有这个问题。如果你也是文件大小为0,建议你换个commons-net版本,并抓包分析一下。
1 楼 wangqi0614 2011-11-22  
请问下载方法,tftp.receiveFile()连接服务器后生成了out流的一个文件,之后我想用这个文件,写上InputStream in = new FileInputStream (file);这句话后为什么总是报receiveFile()错呢?
还有就是你先前说的,为什么下载下来的文件什么都没有呢?请问你这个问题解决了吗?tftp困扰好久了。。。。

相关推荐

    TFTP服务管理器

    【TFTP服务管理器】 TFTP(Trivial File Transfer ...通过"TFTP服务管理器",用户可以方便地管理和监控TFTP服务,确保文件传输的顺利进行。在实际操作中,了解这些核心知识点对于有效利用TFTP进行文件交换至关重要。

    tftp实现开发板与虚拟机传输文件

    TFTP(Trivial File Transfer Protocol)是一种轻量级的文件传输协议,广泛应用于网络设备的文件传输和管理。下面我们将详细介绍如何使用TFTP实现开发板与虚拟机之间的文件传输。 一、安装TFTP服务器 首先,我们...

    TFTP.rar_TFTP C#_tftp_tftp 客户端_tftp客户端

    "TFTP客户端,完全符合RFC-1350"可能是更详细的文档,阐述了该客户端如何遵循RFC-1350标准来实现TFTP协议。 为了构建一个TFTP客户端,开发者需要关注以下关键点: 1. 数据包结构:理解并实现TFTP协议定义的各个...

    tftp源码.rar_tftp_tftp 源码_tftp客户端源码_tftp服务端代码_tftp源码

    TFTP基于UDP(User Datagram Protocol)协议,不提供错误校验、流控制和会话管理等功能,因此它适合于快速、简单的文件传输场景。TFTP协议定义了五种操作类型:OACK(Option Acknowledgement)、RRQ(Read Request)...

    仿tftp文件传输工具

    【仿tftp文件传输工具】是一款专为Linux平台设计的增强型文件传输程序,它在标准的TFTP(Trivial File Transfer Protocol)基础上进行了扩展,提供了更多实用功能。TFTP通常用于简单的文件传输,比如在操作系统引导...

    tftp文件传输工具

    **TFTP文件传输工具详解** TFTP(Trivial File Transfer Protocol),简单文件传输协议,是一种在局域网内进行文件传输的简便、快速的协议。它设计初衷是为那些资源有限或者对复杂性要求较低的环境提供服务,比如在...

    tftp 传送文件工具

    总之,3com的TFTP文件传输工具是网络管理者的得力助手,它以简单、高效的方式解决了网络设备的数据传输问题。在实际操作中,结合正确的使用方法和安全措施,可以大大提高工作效率,降低维护成本。

    WindowsTFTP文件传输工具.rar

    TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,通常用于在计算机网络上进行小文件的传输。与 FTP(File Transfer Protocol)相比,TFTP更加轻量级,但功能也更为简单。TFTP通常用于以下场景: 1...

    锐捷TftpServer.rar

    TFTP(Trivial File Transfer Protocol)是一种简单文件传输协议,常用于网络设备如路由器、交换机等的固件升级或配置文件的传输。在IT行业中,TFTP服务器扮演着至关重要的角色,特别是在网络设备的部署、维护和故障...

    lwip-tftp.zip

    标题 "lwip-tftp.zip" ...这个项目对于学习嵌入式网络通信和文件管理有很好的实践意义,通过实现LWIP和TFTP,开发者可以深入了解微控制器如何与网络进行交互,以及如何在资源有限的环境中高效地处理文件存储和传输。

    tftp 协议 文件传输 socket udp

    ### TFTP协议详解 #### 一、TFTP协议概述 TFTP(Trivial File Transfer Protocol)是一种用于在不同系统之间简单地传输文件的协议。...通过理解其工作原理和应用场景,可以更好地利用TFTP来满足网络管理需求。

    tftp文件下载代码(VC6)

    本项目“tftp文件下载代码(VC6)”是用Microsoft Visual C++ 6.0(简称VC6)编写的,实现了TFTP客户端的功能,能够从远程服务器下载文件。下面我们将详细讨论这个项目中涉及的关键知识点。 1. **TFTP协议**: ...

    简易TFTP文件传送C语言实现

    在这个"简易TFTP文件传送C语言实现"项目中,开发者用C语言编写了一个简单的TFTP客户端和服务器程序,以演示如何实现文件的上传和下载功能。以下是关于这个实现的一些关键知识点: 1. **协议结构**:TFTP协议定义了...

    TFTP简单文件传输协议

    了解TFTP协议的工作原理和使用方法对于网络管理员和嵌入式系统开发者至关重要,尤其是在进行设备固件升级、远程配置等任务时。尽管TFTP功能有限,但其简单性和快速响应的特性使其在特定领域有着不可替代的作用。

    TFTP32,简单文件传输工具

    与更复杂的FTP(文件传输协议)相比,TFTP没有登录验证、目录浏览或文件权限管理等功能,但它的低复杂性和快速响应时间使其在需要快速传输小文件,特别是网络设备固件更新时特别有用。 ### TFTP32的特点 1. **易用...

    开发板远程登录及tftp文件下载

    ### 开发板远程登录及TFTP文件下载 在嵌入式系统开发过程中,远程登录到开发板以及通过TFTP协议进行文件传输是非常常见的操作。本文将详细介绍如何实现这些功能。 #### 一、开发板远程登录 远程登录是通过网络...

    H3C交换机通过tftp拷贝版本文件.pdf

    本文将详细讲解如何在H3C交换机上通过TFTP(Trivial File Transfer Protocol)服务来拷贝版本文件,以便于更新或备份设备软件。 首先,进行这项操作的前提条件是确保你有必要的硬件连接。通常,这需要一条网线用于...

    TFTP客户端_W5500tftp_tftp479_在STM32F103上实现TFTP客户端

    在STM32F103上实现TFTP客户端的具体编程涉及C语言编程,使用STM32CubeMX配置硬件外设,以及可能的RTOS(Real-Time Operating System)来管理任务。开发者需要熟悉STM32 HAL库或者LL库,以及W5500的驱动程序,以实现...

    TFTP示例和引用jar包文件

    在IT行业中,传输文件是常见的任务之一,而TFTP(Trivial File Transfer Protocol)是一种简单且轻量级的文件传输协议。...同时,理解如何引用和管理相关的jar包文件也是开发过程中不可或缺的技能。

    tftp测试工具和Windows下的TFTP服务器与客户端使用教程

    在IT行业中,TFTP(Trivial File Transfer Protocol)是一种简单且轻量级的文件传输协议,主要用于快速上传和下载小型文件。本教程将详细介绍TFTP测试工具以及如何在Windows操作系统下设置和使用TFTP服务器与客户端...

Global site tag (gtag.js) - Google Analytics