1

我正在使用 ftp apache's commomns net version 3.1 。

ftp 连接在执行 INTERMITTENTLY 列表操作时处于挂起状态。

我感觉如此的原因似乎是 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)如果是这样,我需要为 setotimeout() 设置的最佳超时值是多少?

请在下面找到堆栈跟踪:

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

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

谢谢。

4

0 回答 0