`
forhope
  • 浏览: 359925 次
  • 性别: 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困扰好久了。。。。

相关推荐

    WindowsTFTP文件传输工具.rar

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

    tftp离线安装.rar

    本人亲测centos系统离线安装,附带实际...TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。

    TFTP-SERVER

    TFTP-SERVER可以做为TFTP服务器对网络设备的配置文件和IOS进行管理

    TFTP Server-TFTPD32&64;(含使用说明).zip

    TFTP 普通文件传输协议最初是在1980年定义的,它是FTP协议的轻量级版本,没有目录浏览或密码功能。 TFTP采用UDP而不是TCP进行传输,通常用于将固件升级传输到网络设备,如路由器,交换机和IP电话。它还用于启动无盘...

    TFTPServer.zip

    适用于个人建立专用的tftp服务器用于文件的传输和管理等操作,有了他就可以快速建立tftp服务器了,小编为大家带来的是TFTP Server汉化,方便网络管理员使用。

    第14章 管理bootp和tftp 服务器391-412.doc

    第14章 管理bootp和tftp 服务器391-412

    TFTP,FTP,Syslog软件 3CDaemon 2.0 3CDaemon 被设计为用户友好的工具,具有直观的用户界面和简单

    FTP服务器: 除了TFTP,3CDaemon 还包括一个FTP(File Transfer Protocol)服务器,支持更复杂的文件传输需求,提供更多的文件管理功能。 Syslog服务器: 3CDaemon 提供了Syslog服务器功能,用于收集和管理网络设备...

    xgugeng#dev-notes#15、TFTP:简单文件传送协议1

    大多数执行指望TFTP服务器的系统管理员来限制客户的访问,只允许它们访问引导所必须的文件。TFTP使用停止等待协议,数据发送方在发送下一个数据块之前需要等待接受

    netboot-osx:使用 dnsmasq 通过 tftp 启动 OSX EFI 固件

    您将需要使用 dnsmasq 和包含的 dnsmasq.conf 文件来管理这些文件。 启动和运行的基本命令如下。 是在 dnsmasq 邮件列表中找到的,其中包含一个或多或少的工作配置文件,用于使用网络引导映像服务器 mac。NFS 根...

    ccnp ccna习题八管理设备配置

    执行基本的路由器配置 备份路由器配置文件 从 TFTP 服务器将备份配置文件重新加载到路由器的 RAM 中 保存新的运行配置到 NVRAM

    Cisco ASA防火墙 WEB管理固件 asdm-508.bin

    //将原有IOS文件备份到TFTP服务器上 ASA(config)# copy disk0:/asdm521.bin tftp://192.168.1.2/asdm521.bin //将原有asdm文件备份到TFTP服务器上 //设置启动文件及ASDM ASA(config)# asdm image disk0:/asdm621...

    网络工程师华为设备必记命令.pdf

    恢复回收站中的文件命令:undelete 彻底删除回收站中的所有文件命令:reset recycle-bin TFTP文件传输命令:tftp tftp-server{get|put}source-filename[destination-filename] 参数tftp-server表示TFTP服务器的IP...

    神州数码路由器的文件维护.pdf

    实验四、路由器的文件维护 一、 实验目的 a) 掌握路由器的软件升级 b) 备份和还原路由器的配置文件 二、 应用环境 a) 路由器生产厂家会不断推出新的软件版本,增加新的功能,管理员需要及时升级 b) 配置文件需要及时...

    通讯调试工具,支持:串口通讯、串口代理、TCP、UDP、Telnet、Ping、TFtp等通讯测试

    工具支持:串口通讯、串口代理、TCP、UDP、Telnet、Ping、TFtp等通讯测试 1、本工具支持固定预定义命令,命令可以进行分组,由树形控件管理。点击“命令编辑”即可编辑预定义命令, 编辑保存后点击“命令更新”...

    最简单的方法理解vsftpd和tftp

    文件传输协议(File Transfer Protocol,FTP),vsftpd(very secure ftp daemon,非常安全的FTP守护进程 FTP有两种工作模式 1.主动模式,FTP服务器主动连接客户机 2.被动模式,客户机主动连接FTP服务器(FTP服务器...

    深度远程启动管理器v1.3

    本软件遵循BOOTP规范,内置DHCP/TFTP 服务,提供网络 启动服务(netboot),支持工作站从PXE 引导。 PXE 启动所需的网络引导程序(NBP)可由使用者自行指 定,目前国内外使用广泛的开源NBP 主要有:grub4dos/ gpxe/...

    linux嵌入式学习

    文件管理、目录操作、压缩备份、查找搜索、权限管理、磁盘管理、用户管理、组管理、网络管理等命令,VI与VIM编辑器,GNU编译工具GCC,GDB调试器和Makefile开发工程管理工具,Linux开发环境的安装及配置,安装和配置...

    交换机和路由器基本配置.pdf

    交换机配置 交换机硬件构成 交换机软件操作系统( RGNOS ) Console 任何Interface TFTP telnet、web 带外管理 带内管理 常用的交换机配置方法 1) 带外管理 – 通过带外对交换机进行管理 (PC 与交换机直接相连) 2) 带...

    pyton telnet自动备份交换机配置

    使用python编写的自动备份交换机配置的程序,单文件直接运行即可,目前只支持telnet方式连接交换机,支持华为、华三、锐捷交换机,通过tftp方式自动备份配置 管理信息表格为[管理信息.csv],和本程序放在同一个目录 ...

    深度远程启动管理器软件

    深度远程启动管理器软件特性 本软件遵循BOOTP规范,内置DHCP/TFTP 服务,提供网络 启动服务(netboot),支持工作站从PXE 引导。 PXE 启动所需的网络引导程序(NBP)可由使用者自行指 定,目前国内外使用广泛的开源...

Global site tag (gtag.js) - Google Analytics