导入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;
}
}
分享到:
相关推荐
【TFTP服务管理器】 TFTP(Trivial File Transfer ...通过"TFTP服务管理器",用户可以方便地管理和监控TFTP服务,确保文件传输的顺利进行。在实际操作中,了解这些核心知识点对于有效利用TFTP进行文件交换至关重要。
TFTP(Trivial File Transfer Protocol)是一种轻量级的文件传输协议,广泛应用于网络设备的文件传输和管理。下面我们将详细介绍如何使用TFTP实现开发板与虚拟机之间的文件传输。 一、安装TFTP服务器 首先,我们...
"TFTP客户端,完全符合RFC-1350"可能是更详细的文档,阐述了该客户端如何遵循RFC-1350标准来实现TFTP协议。 为了构建一个TFTP客户端,开发者需要关注以下关键点: 1. 数据包结构:理解并实现TFTP协议定义的各个...
TFTP基于UDP(User Datagram Protocol)协议,不提供错误校验、流控制和会话管理等功能,因此它适合于快速、简单的文件传输场景。TFTP协议定义了五种操作类型:OACK(Option Acknowledgement)、RRQ(Read Request)...
【仿tftp文件传输工具】是一款专为Linux平台设计的增强型文件传输程序,它在标准的TFTP(Trivial File Transfer Protocol)基础上进行了扩展,提供了更多实用功能。TFTP通常用于简单的文件传输,比如在操作系统引导...
**TFTP文件传输工具详解** TFTP(Trivial File Transfer Protocol),简单文件传输协议,是一种在局域网内进行文件传输的简便、快速的协议。它设计初衷是为那些资源有限或者对复杂性要求较低的环境提供服务,比如在...
总之,3com的TFTP文件传输工具是网络管理者的得力助手,它以简单、高效的方式解决了网络设备的数据传输问题。在实际操作中,结合正确的使用方法和安全措施,可以大大提高工作效率,降低维护成本。
TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,通常用于在计算机网络上进行小文件的传输。与 FTP(File Transfer Protocol)相比,TFTP更加轻量级,但功能也更为简单。TFTP通常用于以下场景: 1...
TFTP(Trivial File Transfer Protocol)是一种简单文件传输协议,常用于网络设备如路由器、交换机等的固件升级或配置文件的传输。在IT行业中,TFTP服务器扮演着至关重要的角色,特别是在网络设备的部署、维护和故障...
标题 "lwip-tftp.zip" ...这个项目对于学习嵌入式网络通信和文件管理有很好的实践意义,通过实现LWIP和TFTP,开发者可以深入了解微控制器如何与网络进行交互,以及如何在资源有限的环境中高效地处理文件存储和传输。
### TFTP协议详解 #### 一、TFTP协议概述 TFTP(Trivial File Transfer Protocol)是一种用于在不同系统之间简单地传输文件的协议。...通过理解其工作原理和应用场景,可以更好地利用TFTP来满足网络管理需求。
本项目“tftp文件下载代码(VC6)”是用Microsoft Visual C++ 6.0(简称VC6)编写的,实现了TFTP客户端的功能,能够从远程服务器下载文件。下面我们将详细讨论这个项目中涉及的关键知识点。 1. **TFTP协议**: ...
在这个"简易TFTP文件传送C语言实现"项目中,开发者用C语言编写了一个简单的TFTP客户端和服务器程序,以演示如何实现文件的上传和下载功能。以下是关于这个实现的一些关键知识点: 1. **协议结构**:TFTP协议定义了...
了解TFTP协议的工作原理和使用方法对于网络管理员和嵌入式系统开发者至关重要,尤其是在进行设备固件升级、远程配置等任务时。尽管TFTP功能有限,但其简单性和快速响应的特性使其在特定领域有着不可替代的作用。
与更复杂的FTP(文件传输协议)相比,TFTP没有登录验证、目录浏览或文件权限管理等功能,但它的低复杂性和快速响应时间使其在需要快速传输小文件,特别是网络设备固件更新时特别有用。 ### TFTP32的特点 1. **易用...
### 开发板远程登录及TFTP文件下载 在嵌入式系统开发过程中,远程登录到开发板以及通过TFTP协议进行文件传输是非常常见的操作。本文将详细介绍如何实现这些功能。 #### 一、开发板远程登录 远程登录是通过网络...
本文将详细讲解如何在H3C交换机上通过TFTP(Trivial File Transfer Protocol)服务来拷贝版本文件,以便于更新或备份设备软件。 首先,进行这项操作的前提条件是确保你有必要的硬件连接。通常,这需要一条网线用于...
在STM32F103上实现TFTP客户端的具体编程涉及C语言编程,使用STM32CubeMX配置硬件外设,以及可能的RTOS(Real-Time Operating System)来管理任务。开发者需要熟悉STM32 HAL库或者LL库,以及W5500的驱动程序,以实现...
在IT行业中,传输文件是常见的任务之一,而TFTP(Trivial File Transfer Protocol)是一种简单且轻量级的文件传输协议。...同时,理解如何引用和管理相关的jar包文件也是开发过程中不可或缺的技能。
在IT行业中,TFTP(Trivial File Transfer Protocol)是一种简单且轻量级的文件传输协议,主要用于快速上传和下载小型文件。本教程将详细介绍TFTP测试工具以及如何在Windows操作系统下设置和使用TFTP服务器与客户端...