1

我有这个代码来下载一个文件。

    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:软件导致连接中止:在 java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) 在 java.net.SocketOutputStream.write( SocketOutputStream.java:153) 在 sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) 在 sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) 在 sun.nio.cs.StreamEncoder.implFlush (StreamEncoder.java:295) 在 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)

4

4 回答 4

4

关闭防火墙。在这个问题中

于 2012-06-01T16:14:23.950 回答
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 }

这里有一个完整的例子。

2) 可能是因为您尝试获取远程文件“/a.txt”,您尝试访问根目录,而您的 ftp 服务器未设置为允许您访问。在您的 ftp 客户端设置为将用户转储到的任何目录中尝试“a.txt”。

于 2012-05-25T14:56:24.983 回答
0

如果您在防火墙后面,您应该调用 FTPClient 的enterLocalPassiveMode方法的给定示例代码的文档。

于 2012-12-10T22:12:46.943 回答
0

阅读这篇文章http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

解决此问题的解决方法启动程序

-Djava.net.preferIPv4Stack=true

于 2013-08-02T16:34:23.770 回答