2014-01-24 90 views
1

我使用apache commons net FTPSClient連接到本地ftp(被動模式)。連接似乎掛起後FTP連接輸入流掛起

> LIST 
< 150 Opening ASCII mode data connection for /bin/ls. 

我已經添加了一些日誌記錄到FTPClient類,看看它究竟在哪裏掛起。它是用這種方法:http://grepcode.com/file/repo1.maven.org/maven2/commons-net/commons-net/3.3/org/apache/commons/net/ftp/FTPClient.java#FTPClient.initiateListParsing%28org.apache.commons.net.ftp.FTPFileEntryParser%2Cjava.lang.String%29

套接字被創建並且socket.isBound()返回true,如同socket.isConnected(),而socket.isInputShutDown()返回false。所有這一切似乎都很好,直到ftp客戶端實際嘗試從輸入流中讀取數據,這會在沒有任何數據即將出現的情況下無限期地掛起。由於使用SSL,Wireshark不是一個選項。

在這一點上(由於套接字狀態),我排除了防火牆的問題,但我不知道可能會導致掛起。我認爲這是服務器端,我可以與運行它的人交談,但如果我能告訴他們在哪裏尋找,這將是有幫助的。

UPDATE

如果問題是downvoted或投票接近我會非常感激的解釋......在我看來,是一個完美的計算器問題。

+0

你的代碼在哪裏? –

+0

恩,問題中的鏈接......? – nablex

+0

那不是你的代碼...那就是你使用的FTPClient的代碼 –

回答

2

使用FTPS,您必須使用PROT P爲非保護數據通道製作數據通道TLS或PROT C。它可能會掛起,因爲客戶端和服務器不同意通道的保護,例如當服務器等待來自客戶端的TLS客戶端Hello開始加密時,客戶端等待來自服務器的非加密數據。所以請檢查您的通信是否有「PROT」命令及其答覆。

如果FTP服務器位於路由器或防火牆之後,可能會出現其他問題。客戶端位於防火牆後面時使用PASV模式,但如果服務器位於啞防火牆或NAT後面,則會出現問題。嘗試使用純文本(例如非TLS)FTP。

+0

這個問題確實與丟失的握手有關。非常感謝! – nablex