【问题标题】:FTPClient Uploading File = SocketException: Connection resetFTPClient Uploading File = SocketException: Connection reset
【发布时间】:2012-01-10 03:39:33
【问题描述】:

我正在尝试使用 XAMPP 和 FileZilla 通过 FTP 上传一个简单的 txt 文件。
我正在使用Apache Commons Net 3.0.1 Library
这是我的代码,非常基本的东西:

FTPClient client = new FTPClient();
InputStream in = new ByteArrayInputStream("IT WORKS! :D".getBytes());

try {
    client.connect("localhost");
    client.login("user", "password");
    client.enterLocalPassiveMode();
    client.storeFile("textfile.txt", in);
} finally {
    try {
        in.close();
        client.logout();
        client.disconnect();
    } catch (Exception e) {
    }
}


但是... storeFile() 抛出 java.net.SocketException:

Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:189)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:154)
    at java.io.BufferedReader.read(BufferedReader.java:175)
    at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:310)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:474)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:596)
    at org.apache.commons.net.ftp.FTP.pasv(FTP.java:945)
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:719)
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551)
    at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1704)
    at ftpexample.ftpexample.main(ftpprova.java:17)


有什么问题?? :( 我还尝试了在线托管服务,结果相同...
请问这是防火墙还是windows服务相关的问题??

【问题讨论】:

标签: java android ftp xampp apache-commons-net


【解决方案1】:

通过在命令提示符下以管理员身份运行解决

netsh advfirewall set global StatefulFTP disable

这是 Windows 机器上的 Java 7 错误,报告为 here

【讨论】:

  • 我希望我在 4 小时前遇到这个答案,我会为自己节省一些挫败感。这与我遇到的问题完全相同,而且这个修复就像一个魅力。谢谢!
【解决方案2】:

老实说,我不确定,但您应该尝试以下方法:

使用类似下面的代码:

System.out.println(client.getReplyCode());
for(String s : client.getReplyStrings())
    System.out.println(s);

client.login("user", "password"); 之后验证您的连接状态。

如果您没有从上面的代码中得到任何好的提示,请在调用client.storeFile("textfile.txt", in); 后尝试添加client.completePendingCommand();

祝你好运! :)

【讨论】:

  • 感谢您的回答 :) 我通过打印回复得到“230 230 Logged on”,通过调用client.completePendingCommand()得到相同的SocketException
  • 230 很好。我仔细检查了completePendingCommand(),只有当您使用storeFileStream 方法时才需要(您可能想尝试作为替代方法)。哪一行代码抛出异常?服务器中是否创建了任何文件(可能为空)?
【解决方案3】:

设置:

client.setUseEPSVwithIPv4( true );

如果您无法更改 Window 的防火墙设置,则此方法有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 2019-02-02
    • 2011-07-25
    • 1970-01-01
    • 2020-05-16
    • 2018-11-17
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多