如果防火墙处于打开状态,则Java 7会阻止Windows Vista和Windows 7上的FTP传输。 有任何想法吗?

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

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

有没有人有任何想法如何解决或解决这个问题? 我们正在发布一个Java FTP库,所以我们显然不能自己添加exception。

例外:

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日):甲骨文(非常有帮助)的联系人告诉我,微软现在已经升级了这个问题。 我们希望很快看到一些结果。

后续行动3(2012年8月15日):我们在甲骨文的联系人告诉我们,微软已经接受了这个错误,并正在优先处理这个错误。

跟踪4(2012年9月21日):微软已经制作了一个目前正在由Oracletesting的补丁。 在发布date没有字。

跟随5(2012年10月11日):终于成功! 微软已经公开发布了一个修补程序 。 他们暗示修补程序将被包含在未来的一般软件更新中:

“如果这个问题没有对您造成严重的影响,我们build议您等待包含此修复程序的下一个软件更新。”

问题是由防火墙的状态FTPfilter引起的。 作为解决方法,您可以通过执行netsh advfirewall set global StatefulFTP disablepipe理员权限。

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

他们把优先级标记为低,这让我觉得他们不太了解这个问题的严重程度,也就是说Java / Windows上的FTP被破坏了。 我忘了在错误报告中明确说明。 如果其他人觉得应该有更高的优先级,请给Oracle错误报告添加评论。

我只是注意到,你也可以为这个bug“投票”,所以如果你同意它的话,请给它一个投票。

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

 -Djava.net.preferIPv4Stack=true 

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

有关这个问题的博客: http :

也许会引起一些额外的问题意识。

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

这里报告了一个与testing用例相同的bug: Java 7 Socket Exception Bug论坛。 它是Java 7的一个问题

使用IDE Eclipse Neon,JAVA 7和Windows 7 Professional时遇到同样的问题。 试图将PDFfile upload到FTP服务器。 我通过在CMD中以pipe理员身份运行以下命令来解决它:

 C: \ Users \ pc01> netsh advfirewall set global StatefulFTP disable