【问题标题】:Java FTP connection timed outJava FTP 连接超时
【发布时间】:2015-03-23 16:40:26
【问题描述】:

我正在开发一个项目,该项目稍后将在修改后将一些文件上传到 FTP 服务器……除了上传文件之外,我什么都有。我可以成功连接到 FTP 服务器,但是文件上传后,程序会挂起几分钟,然后提示超时。

java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:762)
    at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:565)
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:557)
    at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1795)
    at AdvertisementCreator.main(AdvertisementCreator.java:128)
e

这是我用于 FTP 连接的代码:(请记住,我省略了登录详细信息)

FTPClient fClient = new FTPClient();
           try {
               fClient.connect(server, port);
               showServerReply(fClient);
               int replyCode = fClient.getReplyCode();
               if (!FTPReply.isPositiveCompletion(replyCode)) {
                   System.out.println("Operation failed. Server reply code: " + replyCode);
                   return;
               }
               boolean success = fClient.login(user, pass);
               showServerReply(fClient);
               if (!success) {
                   System.out.println("Could not login to the server");

               } else {
                   System.out.println("You are now logged on!");
                   loginLoop = false;
               }
               fClient.enterLocalPassiveMode();
               fClient.setFileType(FTP.BINARY_FILE_TYPE);
               File localFile = new File("files\\shared.txt");
               String remoteFile = "shared.txt";
               InputStream inputStream = new FileInputStream(localFile);
               System.out.println("Start uploading the file");
               boolean done = fClient.storeFile(remoteFile, inputStream);
               inputStream.close();
               if (done) {
                System.out.println(remoteFile+" has been uploaded successfully");
               }
           } catch (IOException ex) {
               System.out.println("Oops! Something wrong happened");
               ex.printStackTrace();
           }finally {
            try {
                if (fClient.isConnected()) {
                    fClient.logout();
                    fClient.disconnect();
                    System.out.println("FTP Disconnected");
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

直到今天,我才真正搞砸了 Apache Commons FTP。如果有人能提供一些见解,我将不胜感激

编辑:我忘了说在添加以下行之前,文件传输了,但是当我试图在服务器上打开它时,它是空的。

               fClient.enterLocalPassiveMode();
               fClient.setFileType(FTP.BINARY_FILE_TYPE);

【问题讨论】:

    标签: java tcp ftp connection


    【解决方案1】:

    这是一个常见的连接问题,您必须先进行调试:

    首先,确保服务器名称输入正确。还要确保您正确指定了一个端口(如果由于某种原因它不是众所周知的 FTP 端口 21)。

    然后,确保本地主机和远程 FTP 服务器之间有 TCP 连接:例如,打开命令 shell 并尝试执行“telnet 21”。

    • 如果发生错误,您将无法连接到该服务器。从您所在的位置无法访问它。
    • 否则,如果终端清除,则可以退出:已成功建立连接。在这种情况下,请检查您是否在系统设置中使用了代理(例如,在 Windows 中,可以在控制面板\Internet 选项\连接\LAN 上看到它)。如果是,则必须在运行时为 JVM 设置相同的代理参数:
    java -Dftp.socksProxyHost=<proxy host> -Dftp.socksProxyPort=<proxy port> -Djava.net.socks.username=<proxy username> -Djava.net.socks.password=<proxy user password> -classpath ... MainClass
    

    查看 Java 中的所有 networking properties

    还有一种可能是你有一些本地防火墙阻止了这个连接。检查并阅读防火墙手册。

    【讨论】:

    • 我在原帖Little Santi上加了点东西...我试了一下没有进入被动模式,之前错误地设置了文件类型,然后传输到服务器,但是文件是空的我会尝试打开它。我不确定这是否会影响任何事情。
    • 那么现在的情况如何?仍然出现连接超时错误?或者文件必须被传输,现在接收到的文件是空的?发布执行跟踪可能会有所帮助。
    • 我当前的问题是连接超时。这是我在代码中使用的,我在这里查看了教程codejava.net/java-se/networking/ftp/…
    • 我已经把它分解了一些。进入 LocalPassive 模式时似乎是一个问题。当我不输入本地被动时,就是当我上传空白文件时。
    • 是服务器的问题,已经解决了。
    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 2014-04-07
    相关资源
    最近更新 更多