Java 7は、Windows Vistaおよび7でのFTP転送を防ぎます。
FTPでは、ファイルを転送する前に、PORTまたはPASVコマンドを送信する必要があります。コマンドの1つが送信されるとすぐに、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日):マイクロソフトは、現在Oracleによってテストされているパッチを作成しました。リリース日にWordはありません。
フォローアップ5(2012年10月11日):ついに成功! Microsoftは hotfix を公開しました。彼らは、修正が将来的に一般的なソフトウェアアップデートに含まれることを暗示しています:
「この問題による深刻な影響を受けていない場合は、この修正プログラムを含む次のソフトウェア更新プログラムを待つことをお勧めします。」
Windowsホットフィックス http://support.Microsoft.com/kb/2754804 をテストし、問題が解決したことを確認しました。
この問題は、ファイアウォールのステートフルFTPフィルターが原因です。回避策として、netsh advfirewall set global StatefulFTP disable
を管理者権限で実行することで無効にすることができます。
別の回避策は、次を使用してJVMを起動することです。
-Djava.net.preferIPv4Stack=true
Oracleにバグレポートを提出しました。 bugs.Sun.com/bugdatabase/view_bug.do?bug_id=7077696 を参照してください。
彼らは優先度を低いとマークしているので、問題の大きさを十分に理解していない、つまりJava/WindowsでFTPが壊れていると思うようになります。バグレポートでそれを明示的に述べるのを忘れました。他の誰かがより高い優先度が必要だと感じた場合は、Oracleバグレポートにコメントを追加してください。
バグに「投票」することもできることに気付いたので、重要であることに同意する場合は投票してください。
この問題は、JDK7がなくても実証できます。Windows7のファイアウォールは、アプリケーションがIPv6-mapped IPv4アドレスを使用している場合、ftpプロトコルをブロックします。詳細と回避策については、 http://bugs.Sun.com/bugdatabase/view_bug.do?bug_id=7077696 を参照してください。
実際、Windows 7上のJDK7の下のTFTPにも同じ問題があります。MSホットフィックスはFTPの問題を解決しますが、TFTPに対してはまだ機能しません。 Oracleは同じ問題をMSに報告し、TFTPの問題を解決する別の修正プログラムを入手する必要があるようです。
ここで問題についてブログに書きました: http://podzemski.com/2011/09/12/Java-7-prevents-ftp-transfers-on-windows-when-firewall-is-on/
多分それは問題のいくつかの追加の認識を引き起こすでしょう。
同じバグがテストケースでここに報告されました: Java 7 Socket Exception Bug forum。 Java 7の問題
IDE Eclipse Neon、Java 7およびWindows 7 Professional。PDFファイルをアップロードしようとしています。管理者としてCMDで次のコマンドを実行することで解決しました。
C: \ Users \ pc01> netsh advfirewall set global StatefulFTP disable