Java ftp commons.net 网络编码

Java ftp commons.net network coding

我目前正在尝试为 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);" 行,错误为 "Connection closed without indication",我相信我已经正确配置了我的服务器,因为我可以通过 "Putty" 从另一个连接到它网络等。我在这里缺少什么?

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

"I do belive I have configured my server correctly since I can connect to it via "Putty" from another network etc. What am I missing here?"

"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.

我会建议:

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

更新

... it seems i confused sftp with ftps ...

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

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