我有这个代码来下载单个文件。
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
public class NetTest {
public static void main(String[] args){
FTPClient client = new FTPClient( );
OutputStream outStream;
try {
这是服务器和密码的一部分。
client.connect( "servername" );
client.login("noman123", "pass");
String remoteFile = "/a.txt";
outStream = new FileOutputStream( "a.txt" );
简单填写下载但在此行上出错
client.retrieveFile( remoteFile, outStream );
} catch(IOException ioe) {
System.out.println( "Error communicating with FTP server." );
} finally {
try {
client.disconnect( );
} catch (IOException e) {
System.out.println( "Problem disconnecting from FTP server" );
}
}
}
}
它给了我错误 我希望你能理解我现在面临的问题
java.net.SocketException:软件导致连接中止:套接字写入错误 at java.net.SocketOutputStream.socketWrite0(Native Method) 在java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) 在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) 在java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) 在java.io.BufferedWriter.flush(BufferedWriter.java:254) 在org.apache.commons.net.ftp.FTP .__ send(FTP.java:496) 在org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:470) 在org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547) 在org.apache.commons.net.ftp.FTP.port(FTP.java:872) 在org.apache.commons.net.ftp.FTPClient。 openDataConnection (FTPClient.java:667) 在org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1595) 在FtpDownloadDemo.main(FtpDownloadDemo.java:25)
答案 0 :(得分:4)
在此问题中关闭防火墙
答案 1 :(得分:2)
确保你可以ping服务器并手动登录,但假设你没关系,我还会做两件事。
1)根据FTP客户端文档,检查您是否真的已连接
// After connection attempt, you should check the reply code to verify success.
reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{ // print more complete error }
有一个完整的例子here。
2)可能是因为您正在尝试获取远程文件“/a.txt”,您试图访问根目录并且您的ftp服务器未设置为允许您访问。在您的ftp客户端设置为将用户转储到的目录中,只需尝试“a.txt”。
答案 2 :(得分:0)
如果您位于防火墙后面,那么您应该调用FTPClient的 enterLocalPassiveMode 方法的给定示例代码的文档。
答案 3 :(得分:0)
阅读这篇文章http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696
通过
解决此问题的工作-Djava.net.preferIPv4Stack =真