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 服务器)。
我目前正在尝试为 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 服务器)。