【问题标题】:Java ftp commons.net network codingJava ftp commons.net 网络编码
【发布时间】:2016-01-30 22:09:49
【问题描述】:

我目前正在尝试为 android (java) 应用程序进行一些网络编码,但遇到了一些问题。我使用 Apache 库 commons.net 来建立与我托管的服务器的 ftp 连接,以便将文件传输到 android 单元。这是我的代码:

public class Server {
public static void main(String[] args)
{
    String username = "Username";
    String password = "Password";
    String host = "AddressString";
    FTPSClient ftps;
    ftps = new FTPSClient();
    System.out.println("trying to connect...");
    try{
        System.out.println("trying to connect...");
        ftps.connect(host, 21);
        System.out.println("Connected");
        System.out.println("logging in...");
        ftps.login(username, password);
        System.out.println("logged in!");
        ftps.enterLocalPassiveMode();

                catch (IOException ex) {
                    System.out.println("Error: " + ex.getMessage());
                    ex.printStackTrace();
                } finally {
                try {
                    if (ftps.isConnected()) {
                    System.out.print("LOggin out");
                        ftps.logout();
                        ftps.disconnect();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }

}
    System.out.println("Terminated");
}

}

程序永远不会通过“ftps.connect(host, 21);”这一行,出现错误“连接关闭且没有指示”,我相信我已经正确配置了我的服务器,因为我可以通过“Putty”连接到它" 来自另一个网络等。我在这里缺少什么?

注意:我没有尝试通过 Android 设备进行连接,我目前正在使用 eclipse 进行测试。

【问题讨论】:

  • 我显然有点不耐烦,我想我找到了问题所在。我是整个网络的新手,似乎我将 sftp 与 ftps 混淆了,我认为这个库不支持 sftp,所以我将尝试使用 JSch。

标签: java ftp apache-commons-net


【解决方案1】:

“我相信我已经正确配置了我的服务器,因为我可以通过“Putty”从另一个网络等连接到它。我在这里缺少什么?”

“putty”实用程序与端口 22 上的 SSH 服务器通信,而不是与端口 21 上的 FTP 服务器通信。您可以说基本的网络连接/路由似乎工作正常,但这还不够。

您可能遇到的问题包括:

  • FTP 端口被客户端、服务器或两者之间的防火墙阻止,或者

  • FTP 服务器可能配置错误。

我注意到客户端正在尝试使用 FTP/S,但它使用 FTP (21) 的默认端口而不是 FTP/S (991)。这不一定是错误的(有关详细信息,请参阅https://serverfault.com/questions/10807/what-firewall-ports-do-i-need-to-open-when-using-ftps),但也许您应该检查您的服务器是否配置为支持显式 FTP/S。

我会建议:

  • 查看服务器和客户端日志以获取线索
  • 暂时打开“调试级别”日志记录(客户端和服务器端)
  • 看看能不能在21端口建立原始TCP连接;例如使用telnet <server-host> 21
  • 尝试将客户端更改为使用 FTP 而不是 FTP/S
  • 如果一切都失败了,请尝试使用数据包嗅探器来捕获网络流量。

更新

...似乎我将 sftp 与 ftps 混淆了...

是的,它们非常不同。 SFTP 实际上是通过 SSH 连接建立的 FTP 隧道。它需要一个理解 SSH 的客户端库。

因此,如果您尝试使用 FTP / FTPS 客户端库和设置来与 SSH (SFTP) 服务通信,您可能会失败,因为端口 21 被阻止(如果没有 FTP 服务应该是这样)或因为没有 FTP 服务正在运行(这应该是典型的开箱即用 Linux 服务器的默认设置)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2011-04-24
    • 2010-11-03
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多