1、系统临近上线,今天拿出来重新过了一遍,发现一个FTP上传的问题,就是一直报
java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream.java:153) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295) at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) at java.io.BufferedWriter.flush(BufferedWriter.java:254) at org.apache.commons.net.ftp.FTP.__send(FTP.java:505) at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:479) at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:556) at org.apache.commons.net.ftp.FTP.port(FTP.java:881) at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:755) at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:602) at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:593) at org.apache.commons.net.ftp.FTPClient.storeUniqueFile(FTPClient.java:2027) at FtpMy.main(FtpMy.java:43)
2、于是乎就疯狂的google,而后,又度娘乎,无果,不得其解,沉思,好好的怎么会不行了呢。突然一道灵光向我劈来,妈的是不是刚装了系统,开着防火墙。
---还真开着,关之,重试,OK。
附上ftp代码
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.TimeZone; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.apache.log4j.Logger; public class FtpClient { private FTPClient ftpClient; private String strIp; private int intPort; private String user; private String password; private static Logger logger = Logger.getLogger(FtpClient.class.getName()); /* * * Ftp构造函数 */ public FtpClient(String strIp, int intPort, String user, String Password) { this.strIp = strIp; this.intPort = intPort; this.user = user; this.password = Password; this.ftpClient = new FTPClient(); } /** * @return 判断是否登入成功 * */ public boolean ftpLogin() { boolean isLogin = false; FTPClientConfig ftpClientConfig = new FTPClientConfig(); ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID()); this.ftpClient.setControlEncoding("GBK"); this.ftpClient.configure(ftpClientConfig); try { if (this.intPort > 0) { this.ftpClient.connect(this.strIp, this.intPort); } else { this.ftpClient.connect(this.strIp); } // FTP服务器连接回答 int reply = this.ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { this.ftpClient.disconnect(); logger.error("登录FTP服务失败!"); return isLogin; } this.ftpClient.login(this.user, this.password); // 设置传输协议 this.ftpClient.enterLocalPassiveMode(); this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); logger.info("恭喜" + this.user + "成功登陆FTP服务器"); isLogin = true; } catch (Exception e) { e.printStackTrace(); logger.error(this.user + "登录FTP服务失败!" + e.getMessage()); } this.ftpClient.setBufferSize(1024 * 2); this.ftpClient.setDataTimeout(30 * 1000); return isLogin; } /** * @退出关闭服务器链接 * */ public void ftpLogOut() { if (null != this.ftpClient && this.ftpClient.isConnected()) { try { boolean reuslt = this.ftpClient.logout();// 退出FTP服务器 if (reuslt) { logger.info("成功退出服务器"); } } catch (IOException e) { e.printStackTrace(); logger.warn("退出FTP服务器异常!" + e.getMessage()); } finally { try { this.ftpClient.disconnect();// 关闭FTP服务器的连接 } catch (IOException e) { e.printStackTrace(); logger.warn("关闭FTP服务器的连接异常!"); } } } } /*** * 上传Ftp文件 * * @param localFile * 当地文件 * @param romotUpLoadePath上传服务器路径 * - 应该以/结束 * */ public boolean uploadFile(File localFile, String romotUpLoadePath) { BufferedInputStream inStream = null; boolean success = false; try { this.ftpClient.changeWorkingDirectory(romotUpLoadePath);// 改变工作路径 inStream = new BufferedInputStream(new FileInputStream(localFile)); logger.info(localFile.getName() + "开始上传....."); success = this.ftpClient.storeFile(localFile.getName(), inStream); if (success == true) { logger.info(localFile.getName() + "上传成功"); return success; } } catch (FileNotFoundException e) { e.printStackTrace(); logger.error(localFile + "未找到"); } catch (IOException e) { e.printStackTrace(); } finally { if (inStream != null) { try { inStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return success; } /*** * 下载文件 * * @param remoteFileName * 待下载文件名称 * @param localDires * 下载到当地那个路径下 * @param remoteDownLoadPath * remoteFileName所在的路径 * */ public boolean downloadFile(String remoteFileName, String localDires, String remoteDownLoadPath) { String strFilePath = localDires + remoteFileName; BufferedOutputStream outStream = null; boolean success = false; try { this.ftpClient.changeWorkingDirectory(remoteDownLoadPath); outStream = new BufferedOutputStream(new FileOutputStream( strFilePath)); logger.info(remoteFileName + "开始下载...."); success = this.ftpClient.retrieveFile(remoteFileName, outStream); if (success == true) { logger.info(remoteFileName + "成功下载到" + strFilePath); return success; } } catch (Exception e) { e.printStackTrace(); logger.error(remoteFileName + "下载失败"); } finally { if (null != outStream) { try { outStream.flush(); outStream.close(); } catch (IOException e) { e.printStackTrace(); } } } if (success == false) { logger.error(remoteFileName + "下载失败!!!"); } return success; } /*** * @上传文件夹 * @param localDirectory * 当地文件夹 * @param remoteDirectoryPath * Ftp 服务器路径 以目录"/"结束 * */ public boolean uploadDirectory(String localDirectory, String remoteDirectoryPath) { File src = new File(localDirectory); try { remoteDirectoryPath = remoteDirectoryPath + src.getName() + "/"; this.ftpClient.makeDirectory(remoteDirectoryPath); // ftpClient.listDirectories(); } catch (IOException e) { e.printStackTrace(); logger.info(remoteDirectoryPath + "目录创建失败"); } File[] allFile = src.listFiles(); for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (!allFile[currentFile].isDirectory()) { String srcName = allFile[currentFile].getPath().toString(); uploadFile(new File(srcName), remoteDirectoryPath); } } for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (allFile[currentFile].isDirectory()) { // 递归 uploadDirectory(allFile[currentFile].getPath().toString(), remoteDirectoryPath); } } return true; } /*** * @下载文件夹 * @param localDirectoryPath本地地址 * @param remoteDirectory * 远程文件夹 * */ public boolean downLoadDirectory(String localDirectoryPath, String remoteDirectory) { try { String fileName = new File(remoteDirectory).getName(); localDirectoryPath = localDirectoryPath + fileName + "//"; new File(localDirectoryPath).mkdirs(); FTPFile[] allFile = this.ftpClient.listFiles(remoteDirectory); for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (!allFile[currentFile].isDirectory()) { downloadFile(allFile[currentFile].getName(), localDirectoryPath, remoteDirectory); } } for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (allFile[currentFile].isDirectory()) { String strremoteDirectoryPath = remoteDirectory + "/" + allFile[currentFile].getName(); downLoadDirectory(localDirectoryPath, strremoteDirectoryPath); } } } catch (IOException e) { e.printStackTrace(); logger.info("下载文件夹失败"); return false; } return true; } // FtpClient的Set 和 Get 函数 public FTPClient getFtpClient() { return ftpClient; } public void setFtpClient(FTPClient ftpClient) { this.ftpClient = ftpClient; } public static void main(String[] args) throws IOException { FtpClient ftp = new FtpClient("192.168.1.111", 21, "test", "123456"); ftp.ftpLogin(); // 上传文件夹 ftp.uploadDirectory("D:\\test\\2013", "/2013"); // 下载文件夹 // ftp.downLoadDirectory("d://tmp//", "/home/data/DataProtemp"); ftp.ftpLogOut(); } }
3、反思:遇到问题要冷静思考,切记急功近利。
附上官方的描述:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696
相关推荐
java ftp client server 代码 java ftp client server 代码 java ftp client server 代码 java ftp client server 代码
FTPCLI.tar.gz是一个压缩包,其中包含了一个名为"FTPCLI_interesting_java ftp client"的简单FTP客户端项目。这个客户端可能是为那些对基础FTP通信感兴趣的开发者准备的。在本文中,我们将详细探讨FTP(文件传输协议...
ftp server and ftp client
在这个“ftp-client-java.rar”压缩包中,包含了两个核心文件:“FTPClient.java”和“FtpSession.java”,它们分别代表了FTP客户端的核心组件。 `FTPClient.java`: 这个文件通常会包含一个FTP客户端的实现,它...
在“javaftp.rar”项目中,用户可能可以通过按钮选择本地文件或文件夹,然后使用FTPClient将它们上传到FTP服务器。同样,用户也可以下载服务器上的文件或文件夹,或者对已存在的文件进行重命名和删除操作。 ...
Java FTP Client是Java内置的一种实现FTP(File Transfer Protocol)协议的客户端工具,它允许程序员通过编程方式在Java应用中执行FTP操作,如上传、下载、列出远程目录等。这个特定的客户端只提供命令行界面,没有...
Java程序使用Apache的commons-net-3.0.jar包中的org.apache.commons.net.ftp.FTPClient类实现对ftp上传、下载、删除等操作,是一个不错的东西哦
Java Socket 模拟 Ftp Server/Client
在这个“clientFtp.rar”压缩包中,我们找到了一个名为“clientFtp”的项目,它是一个用Java实现的FTP客户端。这个客户端能够连接到FTP服务器,进行文件的上传、下载以及其他相关的操作。 在Java中实现FTP客户端,...
Java FTP上传JAR包是一项常见的任务,特别是在自动化部署或者远程更新系统组件时。在这个过程中,我们需要使用Java编程语言,结合FTP(File Transfer Protocol)协议来实现在服务器上上传JAR文件。以下是一些相关的...
1. **Java FTP库**:Java标准库中的`java.net.Socket`和`java.io`可以用于基本的TCP连接和文件I/O,但更高级的FTP操作通常会使用`org.apache.commons.net.ftp`库,这个库简化了FTP协议的处理,包括登录、目录浏览、...
Java FTP客户端是用Java语言实现的能够连接到FTP服务器并执行各种文件操作的程序。"J-FTP"是这样的一个客户端,它提供了友好的用户界面和丰富的功能,方便开发者或普通用户在Java环境中与FTP服务器交互。 在Java中...
在描述中提到的"FTP CLIENT"部分,可能包含Java代码实现了一个简单的FTP客户端,能够连接到服务器,发送文件上传或下载请求。 FTP服务器是接收客户端命令并执行相应操作的实体。"FTP server client"可能是指一个...
在这个名为"FTP_sever-java.rar_doc_ftp readme_java ftp_java ftp服务器"的压缩包中,我们可以找到与使用Java语言实现FTP服务器相关的资源。这个压缩包包含一个"readme.doc"文档和一个名为"第2章 FTP客户端"的文件...
"javaFtp"目录很可能是项目的主要源代码存放地,里面包含了实现FTP功能的Java类。这些类可能包括了FTP客户端和服务器端的逻辑,如FTP连接、文件上传和下载的实现,以及用户认证和管理的相关代码。 "client"目录可能...
FileZilla FTP Client是一款广泛应用的开源FTP客户端,它在IT领域扮演着重要的角色,尤其对于文件的上传和下载测试。FTP(File Transfer Protocol)是一种网络协议,用于在互联网上进行文件传输。FileZilla因其易用...
Java定时从FTP服务器更新相关文件是一项常见的任务,特别是在自动化数据同步和备份的场景中。这里主要涉及的技术点包括FTP协议、Java编程以及文件系统操作。本文将深入探讨这些知识点,并提供一个基于`ftp4j`库的...
vxWorks下ftp client源码
### 基于Java语言的FTP Client程序设计 #### 一、引言 FTP(File Transfer Protocol)是一种标准的应用层协议,主要用于在互联网环境中进行文件的传输。它提供了一种简单而有效的方法来共享文件资源,使用户能够在...
`ftp4j`是一个功能丰富的Java FTP客户端库,它提供了一套完整的API,方便开发者在Java应用程序中集成FTP功能。 `ftp4j`类库的主要特性包括: 1. **连接与断开**:`FtpClient`类是ftp4j的核心,通过`connect()`方法...