如何设置ftp控制连接的读取超时

时间:2014-02-26 12:31:40

标签: apache list ftp timeout hung

我使用的是ftp apache的commomns net 3.1版。

ftp连接在进行间歇性列表操作时处于挂起状态。

我觉得这样的原因似乎是ftp客户端在尝试打开列表操作的数据连接时,无休止地等待FTP命令PASV的服务器响应。

如何在控制连接上设置读取超时以避免这种情况。

我使用setDataTimeout()设置了数据连接的readtimeout。

更多参考: http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html#setDataTimeout(int)

1)在执行ftp connect()操作后设置setsoTimeout()是否有助于避免控制连接出现这种情况?

更多参考: http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/SocketClient.html#setSoTimeout(int)

2)如果是这样,我需要为setsotimeout()设置的最佳超时值是多少?

请在下面找到堆栈跟踪:

at java.net.SocketInputStream.socketRead0(Native Method)                 
at java.net.SocketInputStream.read(SocketInputStream.java:140)           
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:464)  
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:506)   
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:234)                 
at java.io.InputStreamReader.read(InputStreamReader.java:188)            
at java.io.BufferedReader.fill(BufferedReader.java:147)                  
at java.io.BufferedReader.read(BufferedReader.java:168)                  
at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58 
)                                                                        
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:310)               
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)               
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:479)              
at org.apache.commons.net.ftp.FTPClient.openDataConnection(FTPClient.java:7 
69)
at org.apache.commons.net.ftp.FTPClient.openDataConnection(FTPClient.java:6 
57) 
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java: 
3097) 
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java: 
3072)
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java: 
2972

对此的任何帮助将不胜感激:)

感谢。

0 个答案:

没有答案