74

Java 7 阻止了 Windows Vista 和 7 上的 FTP 传输。

在 FTP 中,在传输文件之前,必须发送 PORT 或 PASV 命令。一旦发送其中一个命令,Windows 防火墙就会关闭发送它的套接字。这只发生在防火墙打开并且没有 java.exe 异常的情况下。我怀疑这个问题与使用新 Vista IP 堆栈的 Java 7 有关。

有谁知道如何解决或解决这个问题?我们正在分发一个 Java FTP 库,所以我们显然不能自己添加异常。

例外:

java.net.SocketException: Permission denied: recv failed

JRE 版本信息:

java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)

跟进 1(2011 年 11 月 14 日): Oracle 分析了这个问题,发现它似乎是 Windows 防火墙和/或 IPv6 堆栈中的一个错误。他们设法用原生 C(即非 Java)应用程序复制了该问题,因此这是该错误不在 Java 中的有力证据。他们已经通知了微软,所以现在球在他们的球场上。更多详细信息,请访问http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

跟进 2(2012 年 7 月 27 日): Oracle 的一位(非常有帮助的)联系人告诉我,该问题现在已在 Microsoft 升级。我们希望很快能看到一些结果。

后续行动 3(2012 年 8 月 15 日): 我们在 Oracle 的联系人告诉我们,Microsoft 已接受该错误并正在对其进行优先处理。

后续行动 4(2012 年 9 月 21 日): Microsoft 制作了一个补丁,目前正在由 Oracle 测试。没有关于发布日期的消息。

后续行动 5(2012 年 10 月 11 日): 终于成功了!Microsoft 已公开发布了一个修补程序。他们暗示该修复程序将包含在未来的一般软件更新中:

“如果您没有受到此问题的严重影响,我们建议您等待包含此修补程序的下一个软件更新。”

4

9 回答 9

88

该问题是由防火墙的状态 FTP 过滤器引起的。netsh advfirewall set global StatefulFTP disable作为一种解决方法,您可以通过以管理员权限执行来禁用它。

于 2011-10-05T07:16:33.687 回答
15

另一种解决方法是使用以下命令启动 JVM:

-Djava.net.preferIPv4Stack=true
于 2011-11-25T02:05:39.303 回答
14

我已向 Oracle 提交了错误报告,请参阅bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

他们将优先级标记为低,这让我认为他们不太了解问题的严重性,即 FTP 在 Java/Windows 上被破坏。我忘了在错误报告中明确说明这一点。如果其他人认为它应该具有更高的优先级,请在 Oracle 错误报告中添加评论。

我刚刚注意到你也可以为这个错误“投票”,所以如果你同意它很重要,请给它投票。

于 2011-08-24T04:46:48.267 回答
14

我们测试了 Windows 修补程序http://support.microsoft.com/kb/2754804并确认它确实解决了问题。

于 2012-11-01T15:41:02.300 回答
5

这个问题可以在没有 JDK7 的情况下演示,当应用程序使用 IPv6 映射的 IPv4 地址时,Windows 7 中的防火墙阻止了 ftp 协议。有关更多详细信息和解决方法,请参见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

于 2011-11-14T10:11:35.263 回答
2

在这里写了关于这个问题的博客:http: //podzemski.com/2011/09/12/java-7-prevents-ftp-transfers-on-windows-when-firewall-is-on/

也许它会引起对问题的一些额外认识。

于 2011-09-12T14:52:19.117 回答
2

实际上windows 7上JDK7下的TFTP也有同样的问题,MS hotfix确实解决了FTP问题,但仍然不适用于TFTP。似乎 Oracle 应该向 MS 报告同样的问题并获得另一个修补程序来解决 TFTP 问题。

于 2012-12-10T07:47:58.847 回答
1

此处通过测试用例报告了相同的错误: Java 7 Socket Exception Bug论坛。它是 Java 7 的问题

于 2011-09-02T20:09:29.017 回答
0

我在使用 IDE Eclipse Neon、JAVA 7 和 Windows 7 Professional 时遇到了同样的问题。尝试将 PDF 文件上传到 FTP 服务器。我通过以管理员身份在 CMD 中运行以下命令解决了这个问题:

C: \ Users \ pc01> netsh advfirewall set global StatefulFTP disable
于 2017-03-16T14:55:46.027 回答