FTPClient :: retrieveFile上的套接字异常

时间:2012-07-30 13:10:11

标签: java apache-commons-net

我有一个应用程序应该连接到ftp服务器下载文件。几个月前,一切正常,但现在我想改变一些部分并在retrieveFile上获得例外:

FTPClient ftp=ConnectToServer();
OutputStream stream = new FileOutputStream("TempServerLog.txt");
ftp.retrieveFile(FileName, stream);

这是StackTrace:

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服务器。服务器运行正常,我可以使用具有相同用户名/ Pw的FileZilla客户端。

Serverlog告诉我:

(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 repo检查了一个旧版本,它现在遇到了同样的问题。我为这个项目使用了额外的Eclipse安装,因此整个环境不应该被更改,但我仍然会收到此套接字错误。

1 个答案:

答案 0 :(得分:0)

它接缝,Windows防火墙导致了这个问题。此外它应该只对公共网络有效,因为当我连接到localhost时它会以某种方式引起问题。完全停用后,我的程序就可以正常工作了。