我目前正在开发一个必须将自己连接到本地 FTP 服务器的 Android 应用程序(我正在使用 Filezilla 服务器)。我已经下载了 org.commons.apache.net ftp 库。
这是我相对于我的 android 项目的代码:
FTPClient mFTPClient = new FTPClient();
try {
mFTPClient = new FTPClient();
mFTPClient.connect("10.0.2.2", 21);
if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
mFTPClient.login("lucas", "elie");
mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
mFTPClient.enterLocalPassiveMode();
}
} catch (SocketException e) {
Log.e("TEST", "SocketException: " + e.getStackTrace().toString() + " " + e.getMessage());
} catch (UnknownHostException e) {
Log.e("TEST", "UnknownHostException: " + e.getStackTrace().toString() + " " + e.getMessage());
} catch (IOException e) {
Log.e("TEST", "IOException: " + e.getStackTrace().toString() + " " + e.getMessage());
}
//
FileOutputStream desFileStream;
try {
desFileStream = new FileOutputStream("/mnt/sdcard/sample_0.jpg");
mFTPClient.retrieveFile("/sample_0.jpg", desFileStream);
desFileStream.close();
} catch (FileNotFoundException e) {
Log.e("TEST", "FileNotFoundException: " + e.getStackTrace().toString() + " " + e.getMessage());
} catch (IOException e) {
Log.e("TEST", "IOException: " + e.getStackTrace().toString() + " " + e.getMessage());
}
连接正常(mFTPClient.connect("10.0.2.2", 21);),我可以在本地服务器界面上看到它,但是当我尝试下载文件时(mFTPClient.retrieveFile("/sample_0. jpg", desFileStream);),我在 Logcat 中得到一个 IOException :
04-07 11:25:26.300: E/TEST(671): IOException: [Ljava.lang.StackTraceElement;@412ca688 无法连接到 /127.0.0.1(端口 2832):连接失败:ECONNREFUSED(连接被拒绝)
我确切地说我在 Android Manifest XML 文件中添加了这两行:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
使用完全相同的代码,但在经典的 Java 项目而不是 Android 项目中,一切正常(将 10.0.2.2 替换为 127.0.0.1,将“/mnt/sdcard”替换为“C:\”)!
有人可以帮我吗?
编辑:我发现我的错误。如果这可以帮助某人,我只需将 10.0.2.2 替换为我的本地 IP 地址(在我的情况下为 192.168.0.5)