2012-07-30 54 views
0

我有一個應該連接到FTP服務器的應用程序下載一個文件。幾個月前,一切運行良好,但現在我想改變一些地方和retrieveFile得到例外:在FTPClient :: 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 Client。

的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,它與我的本地服務器配合工作。我也嘗試從2.2版本(我開始使用該項目時)更新Apache-Commons-net到當前的3.1版本,但錯誤依然存在。

我也檢查了一箇舊版本從我的項目git回購它現在有同樣的問題。我爲這個項目使用了一個額外的Eclipse安裝,所以整個環境不應該改變,但我仍然得到這個套接字錯誤。

+0

你可以發佈堆棧跟蹤嗎? – Mike 2012-07-30 13:30:03

+0

另外,你是否在任何時候都進入被動模式? ftp.enterLocalPassiveMode() – Mike 2012-07-30 13:36:43

+0

我添加了堆棧跟蹤。我不使用被動模式,只是簡單的基本功能。 – JonathanK 2012-07-30 20:41:53

回答

0

它接縫,Windows防火牆引起了這個問題。此外,它應該只是公共網絡活躍,它連接到本地主機時會導致問題。完全關閉它後,我的程序就可以工作了。