2010-07-06 79 views
1

我在java ftp代碼中出錯。java ftp代碼中的問題

SimpleFTP無法請求被動模式。 我從網上覆制了這段代碼。但它不工作

sendLine("PASV"); 
    String response = readLine(); 
    System.out.println(response); 
    System.out.println(response); 
    if (!response.startsWith("227")) { 
     throw new IOException("SimpleFTP could not request passive mode: " + response); 
    } 
+0

錯誤是什麼?你沒有提供任何信息? – Prav 2010-07-06 06:02:18

+0

這可能是完整的來源:http://www.silversurferslab.com/blogs/1/java-simple-ftp-client-class-26.html – 2010-07-06 06:06:49

+0

它顯示「SimpleFTP無法請求被動模式」 – 2010-07-06 06:08:13

回答

1

它看起來像你能夠連接到FTP服務器 - 否則,你收到的IOExceptions或NullPointerExceptions的要早得多。

問題是,您無法建立被動模式連接。如果服務器是標準產品,那麼我認爲,它會以227消息正確響應。

如果我有調試,我會用下面的啓動:

  1. 使用正常的外殼基於FTP客戶端,並嘗試手動輸入被動模式。也許你會得到不同的迴應,也許服務器只是在真正的消息之前發送一個空行,然後才能使用像wireshark這樣的網絡嗅探器來監視流量。
  2. 嘗試連接到一個不同的FTP服務器
  3. 檢查防火牆設置 - 那些可能會阻止被動模式,因爲它使用不同的端口
+0

ok。謝謝安德烈亞斯..我會試着告訴你.. – 2010-07-06 06:37:44

+0

我知道了安德烈亞斯..其實問題是在我的服務器,因爲你告訴。但我的客戶端服務器代碼運行良好。謝謝你的努力.. – 2010-07-17 05:21:43

1

啓動命令行FTP客戶端不帶任何參數。發出debug命令以啓用顯示協議消息,並使用passive命令設置被動模式。 (注意: windows命令行ftp不支持被動模式!)使用open命令連接到主機。系統會提示您是否需要登錄。發出ls命令以獲取目錄列表。

通過所有這些,客戶端將顯示發送和接收的消息。您的代碼可能有一些消息類型無法處理。例如,SimpleFTP代碼here不處理多行響應。請參閱RFC-959 § 4.2:FTP響應。

一個嵌入式系統我響應工作成功登錄使用:因爲它期待與"220 "開頭的一行

220-Setting memory limit to 1024+1024kbytes 
220-Local time is now 10:33 and the load is 1.36. 
220 You will be disconnected after 1800 seconds of inactivity. 

的SimpleFTP代碼失敗。

此外,儘管FTP協議相當老舊,但您會遇到不少不符合要求的實現。

如果您需要做任何比'put file'或'get file'更復雜的事情,請看edtFTPj/Free