java.net.SocketTimeoutException的原因是什么:读取超时

时间:2013-10-15 10:53:49

标签: java ftp socketexception connection-timeout

我编写了一个连接FTP的java代码。我使用ftp4j-1.7.2 jar通过java连接FTP。我使用了String []" it.sauronsoftware.ftp4j.FTPClient.connect(字符串arg0)"和" it.sauronsoftware.ftp4j.FTPClient.disconnect(boolean arg0)"从FTP连接和断开连接的方法。当我在java 1.5中运行代码时,代码工作正常,但它正在抛出" java.net.SocketTimeoutException:read timed out &#34 ;当我在java 1.6中运行它时断开连接。任何人都可以让我知道解决方案。

错误日志:

Stack:
    java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
    at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:107)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:93)
    at java.io.InputStreamReader.read(InputStreamReader.java:151)
    at it.sauronsoftware.ftp4j.NVTASCIIReader.readLine(NVTASCIIReader.java:105)
    at it.sauronsoftware.ftp4j.FTPCommunicationChannel.read(FTPCommunicationChannel.java:142)
    at it.sauronsoftware.ftp4j.FTPCommunicationChannel.readFTPReply(FTPCommunicationChannel.java:187)
    at it.sauronsoftware.ftp4j.FTPClient.disconnect(FTPClient.java:1133)

2 个答案:

答案 0 :(得分:2)

这可能是一个隧道问题。试试这个标志:

-Djava.net.preferIPv4Stack=true 

答案 1 :(得分:0)

这意味着在超时期间没有数据到达。在这种情况下,没有回复断开请求。很明显,你正在使用的库是设置读取超时,或者你是,并且它太短,看看你是否可以增加它。

我无法解释不同JDK的不同行为,除非在某处有读取超时修复,但我从来没有意识到任何读取超时问题,我一直回到1.1。 2。