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 已公开发布了一个修补程序。他们暗示该修复程序将包含在未来的一般软件更新中:
“如果您没有受到此问题的严重影响,我们建议您等待包含此修补程序的下一个软件更新。”