FTP サーバーに接続してファイルをダウンロードするアプリケーションがあります。数か月前はすべて問題なく動作していましたが、今回はいくつかの部分を変更して、retrieveFile で例外を取得したいと考えました。
FTPClient ftp=ConnectToServer();
OutputStream stream = new FileOutputStream("TempServerLog.txt");
ftp.retrieveFile(FileName, stream);
これはスタック トレースです。
java.net.SocketOutputStream.socketWrite0(Native Method)
java.net.SocketOutputStream.socketWrite(Unknown Source)
java.net.SocketOutputStream.write(Unknown Source)
sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source)
sun.nio.cs.StreamEncoder.implFlush(Unknown Source)
sun.nio.cs.StreamEncoder.flush(Unknown Source)
java.io.OutputStreamWriter.flush(Unknown Source)
java.io.BufferedWriter.flush(Unknown Source)
org.apache.commons.net.ftp.FTP.__send(FTP.java:501)
org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:475)
org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:552)
org.apache.commons.net.ftp.FTP.port(FTP.java:877)
org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:709)
org.apache.commons.net.ftp.FTPClient._retrieveFile(FTPClient.java:1677)
org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1669)
Util.FtpServer.DownloadConfigurationFile(FtpServer.java:83)
Main.main(Main.java:40)
sendCommand のコマンドは「PORT 127,0,0,1,192,226\r\n」です。Win7 マシンで FileZilla FTP サーバーを使用しています。サーバーは正常に動作し、同じユーザー名/パスワードで FileZilla クライアントを使用できます。
サーバーログには次のように表示されます。
(not logged in) (127.0.0.1)> Connected, sending welcome message...
(not logged in) (127.0.0.1)> 220-FileZilla Server version 0.9.37 beta
(not logged in) (127.0.0.1)> 220 Lokaler Test FTP Server - have fun!
(not logged in) (127.0.0.1)> USER peter
(not logged in) (127.0.0.1)> 331 Password required for peter
(not logged in) (127.0.0.1)> PASS
peter (127.0.0.1)> 230 Logged on
peter (127.0.0.1)> disconnected.
したがって、正常にログインできますが、ファイルの取得中に切断されます。
ローカル サーバーで動作する古いバージョンのコンパイル済みの jar ファイルがまだあります。また、Apache-Commons-net を 2.2 (プロジェクトを開始したときに使用したもの) から現在のバージョン 3.1 に更新しようとしましたが、エラーは同じままです。
また、プロジェクトの私のgitレポから古いバージョンをチェックアウトしましたが、現在は同じ問題があります。このプロジェクトには追加の Eclipse インストールを使用したため、環境全体は変更されていないはずですが、それでもこのソケット エラーが発生します。