【问题标题】:Connection reset when calling disconnect() using enterprisedt's ftp java framework使用 Enterprisedt 的 ftp java 框架调用 disconnect() 时连接重置
【发布时间】:2010-05-28 15:18:15
【问题描述】:

我无法使用enterprisedt java ftp framework.从 ftp 服务器断开连接

我不能简单地调用 FileTransferClient 对象上的 disconnect() 而不得到错误。

我什么都不做,除了连接服务器,然后断开连接:

        // create client
        log.info("Creating FTP client");
        ftp = new FileTransferClient();

        // set remote host
        log.info("Setting remote host");
        ftp.setRemoteHost(host);
        ftp.setUserName(username);
        ftp.setPassword(password);

        // connect to the server
        log.info("Connecting to server " + host);
        ftp.connect();
        log.info("Connected and logged in to server " + host);

        // Shut down client
        log.info("Quitting client");
        ftp.disconnect();

        log.info("Example complete");

运行时,日志显示:

INFO [test] 28 maj 2010 16:57:20.216 : Creating FTP client
INFO [test] 28 maj 2010 16:57:20.263 : Setting remote host
INFO [test] 28 maj 2010 16:57:20.263 : Connecting to server x
INFO [test] 28 maj 2010 16:57:20.979 : Connected and logged in to server x
INFO [test] 28 maj 2010 16:57:20.979 : Quitting client
ERROR [FTPControlSocket] 28 maj 2010 16:57:21.026 : Read failed ('' read so far)

还有堆栈跟踪:

com.enterprisedt.net.ftp.ControlChannelIOException: Connection reset
at com.enterprisedt.net.ftp.FTPControlSocket.readLine(FTPControlSocket.java:1029)
at com.enterprisedt.net.ftp.FTPControlSocket.readReply(FTPControlSocket.java:1089)
at com.enterprisedt.net.ftp.FTPControlSocket.sendCommand(FTPControlSocket.java:988)
at com.enterprisedt.net.ftp.FTPClient.quit(FTPClient.java:4044)
at com.enterprisedt.net.ftp.FileTransferClient.disconnect(FileTransferClient.java:1034)
at test.main(test.java:46)

应该注意的是,我可以毫无问题地连接服务器,并使用服务器做一些事情,比如获取当前工作目录中的文件列表。但由于某种原因,我不能断开连接!我尝试过使用主动和被动模式。

上面的例子是从他们自己的例子中复制/粘贴的。我无法通过 Google 搜索找到与此相关的任何内容,所以我希望您对此问题有任何建议或经验。

【问题讨论】:

  • 你试过不同的ftp服务器吗?当您发送退出命令时,服务器实现可能会断开您的连接(在您优雅地关闭之前)。
  • 我有。我忘了在我的问题中提到它,但我尝试连接到 2 个 ftp 服务器,结果相同。

标签: java ftp disconnect enterprisedt


【解决方案1】:

尝试启用跟踪

com.enterprisedt.util.debug.Logger.setLevel(com.enterprisedt.util.debug.Level.DEBUG);

这将让您观察库和 ftp 服务器之间的通信。

尝试使用命令行客户端打开与 ftp 服务器的连接。连接,登录,验证一切正常。然后输入quot quit。这会向 ftp 服务器发送明确的quit 命令。您应该得到221226 响应。如果您得到任何其他代码,或者如果连接刚刚关闭,那么您将遇到不兼容的 FTP 服务器。

如果是这种情况,您也可以尝试使用disconnect(true),因为它只是关闭连接而不是尝试正常关闭。

【讨论】:

  • 不兼容,因为不理解该退出命令?我试试看,谢谢!
  • 我收到 221 响应,所以我猜服务器没有问题。 disconnect(true) 有效,但让我很恼火的是它只是关闭了所有内容。我想我可以自己实现 disconnect() 的功能,但是知道有某种你不知道如何修复的错误仍然很烦人:S
猜你喜欢
  • 2016-03-04
  • 2012-03-24
  • 2011-12-22
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2017-05-05
相关资源
最近更新 更多