【问题标题】:FTP SocketTimeoutException even with using passive modeFTP SocketTimeoutException 即使使用被动模式
【发布时间】:2011-09-23 12:53:34
【问题描述】:

我们在 AIX 上使用 commons-net-1.4.1.jar 和 java5_64。我在 FTP 服务器上列出文件时遇到以下异常。

java.net.SocketTimeoutException: Accept timed out
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:427)
        at java.net.ServerSocket.implAccept(ServerSocket.java:466)
        at java.net.ServerSocket.accept(ServerSocket.java:434)
        at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:502)
        at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2488)

此错误是间歇性的,因为该过程每天运行大约 60 次,我收到错误 2 或 3 次,其余时间运行正常。

我在互联网上找到了将连接模式从主动更改为被动的可能解决方案,但这也无济于事。

您能帮帮我吗,我不知道可能是什么原因。

【问题讨论】:

    标签: java ftp


    【解决方案1】:

    您尝试从中列出文件的远程服务器根本没有响应...(这是一种相当常见的情况)。他们的互联网连接此时已关闭,或者您自己的互联网连接已关闭,或者服务器已饱和并拒绝连接,或者任何可能的情况。

    (每次进程成功时你是否正确关闭与服务器的连接?服务器可能拒绝连接,因为它认为你已经连接)

    【讨论】:

    • 感谢您的回答。是的,服务器连接每次都会正确关闭。有两个进程运行相同的代码。在被动模式下,只有一个用于间歇性地给出上述问题,而另一个则运行良好。我已经停止了另一个过程,发现我们现在可以通过那一步了。但是在后面的代码中,当我们试图列出文件名时,我们又被绞死了。我们没有明确指定解析器。在没有显式解析器的情况下,它之前可以正常工作,并且在其他进程中也可以正常工作。
    • 我遇到了异常。 java.net.SocketTimeoutException:在 java.net.ServerSocket.implAccept(ServerSocket.java:466) 的 java.net.PlainSocketImpl.accept(PlainSocketImpl.java:427) 的 java.net.PlainSocketImpl.socketAccept(Native Method) 接受超时) 在 org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:502) 在 org.apache.commons.net.ftp.FTPClient 的 java.net.ServerSocket.accept(ServerSocket.java:434)。 listNames(FTPClient.java:1959) at org.apache.commons.net.ftp.FTPClient.listNames(FTPClient.java:2006)
    【解决方案2】:

    如果连接中的一切都是正确的,即根据服务器的被动和 ASCII,并且您仍然遇到套接字超时,那么在 ftpClient.setTimeout(220) 下增加连接时间;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2022-12-08
      • 1970-01-01
      相关资源
      最近更新 更多