2011-08-10 42 views
1

我開發了一個基於Web的應用程序,它允許客戶端/用戶上傳文件到JVM內存。然後服務器端代碼將FTP文件傳送到另一臺服務器。這一切都在我的本地機器上正常工作,但我現在遇到了問題,讓我們在我們的測試環境服務器上工作。尋找幫助診斷與FTP傳輸使用Apache FTP客戶端服務器套接字問題

在測試環境服務器上,代碼成功連接並登錄到遠程Windows服務器,但在文件傳輸期間掛起。在目標服務器上創建一個空文件,但不傳輸字節。從JVM堆棧跟蹤並最終殺死線程:

[10/08/11 14:45:24:234 BST] 00000003 ThreadMonitor W WSVR0605W: Thread "WebContainer : 2" (00000033) has been active for 666083 milliseconds and may be hung. There is/are 1 thread(s) in total in the server that may be hung. 
at java.net.PlainSocketImpl.socketAccept(Native Method) 
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:431) 
at java.net.ServerSocket.implAccept(ServerSocket.java:464) 
at java.net.ServerSocket.accept(ServerSocket.java:432) 
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:693) 
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551) 
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1704) 
... (my own app code stack trace from here on down) 

看起來像一個插座的問題,但任何人都可以幫我找出哪臺機器上的問題嗎?它是測試環境JVM還是目標Windows服務器?我猜測它的測試環境服務器,否則我會在我的本地機器上看到這個問題?如果它位於測試環境服務器上,是否需要開放端口(如果需要,我需要什麼)?最受讚賞的任何幫助。

回答

2

這聽起來像是一個防火牆問題,可以通過爲FTP客戶端使用被動模式來解決。處於活動模式時,FTP服務器嘗試在傳輸文件時啓動與FTP客戶端的連接,並且防火牆/ WAS可能不會這樣。

按照​​爲公共ftpclient,默認模式是有效的,所以在你的代碼,嘗試調用

ftpclient.enterLocalPassiveMode(); 
的連接後

,但文件傳輸之前。

+0

我的英雄! :)感謝一百萬,這確實有竅門,並可能爲我節省了幾天的麻煩。 –

+0

嗨,我試過你的方式,但仍然得到其他錯誤。可以試試幫忙嗎? [link] http://stackoverflow.com/questions/24901224/java-lang-nullpointerexception-at-org-apache-commons-net-ftp-ftpclient-storefile –