私が間違っていることを教えてください。このコードは、retrieveFile を呼び出した後にクラッシュします (例外 e)。IIS FTP (正常に接続できる) から SD カード (エミュレーターに添付された .iso ファイル) にファイルをダウンロードしようとしています。FTPのメインディレクトリに「test.txt」というファイルがあり、printWorkingDirectory()で「/」が表示されます。マニフェストにアクセス許可を書き込み、.txt 拡張子なしで試しました。
try {
File file = new File(Environment.getExternalStorageDirectory(), "test2.txt");
Log.e(TAG, "1 " + Environment.getExternalStorageDirectory());
file.mkdir();
FileOutputStream desFileStream = new FileOutputStream(file);
Log.e(TAG, "2 " + Environment.getExternalStorageDirectory());
status = mFTPClient.retrieveFile("/"+"test.txt", desFileStream);
Log.e(TAG, "3");
desFileStream.close();
return status;
} catch (Exception e) {
Log.d(TAG, "download failed");
}
10-20 18:02:03.498: E/(1380): 1 /ストレージ/
SD カード 10-20 18:02:03.507: E/(1380): 2 /ストレージ/
SD カード 10-20 18:02:03.777: W /System.err(1380): java.net.ConnectException: /127.0.0.1 (ポート 63564) への接続に失敗しました: 接続に失敗しました: ECONNREFUSED (接続が拒否されました)
10-20 18:02:03.816: W/System.err( 1380): libcore.io.IoBridge.connect(IoBridge.java:114) で
10-20 18:02:03.816: W/System.err(1380): java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) で)
10-20 18:02:03.847: W/System.err(1380): java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
10-20 18:02:03.847: W/System.err(1380) ): java.net.Socket.startupSocket(Socket.java:566)
10-20 18:02:03.867: W/System.err(1380): java.net.Socket.tryAllAddresses(Socket.java:127) で
10-20 18:02:03.887: W/System.err(1380): java.net.Socket.(Socket.java:177) で
10-20 18:02:03.917: W/System.err(1380): java.net.Socket.(Socket.java:149)
10-20 18:02:03.967: W/System.err(1380): javax.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:40)
10-20 18:02:03.988: W/System.err(1380): org.apache.commons.net.ftp.FTPClient で。openDataConnection (FTPClient.java:502)
10-20 18:02:04.029: W/System.err(1380): org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1276) で
10-20 18:02:04.083: W/System.err(1380): com.prgguru.android.FTP.ftpDownload(FTP.java:170)
10-20 18:02:04.156: W/System.err(1380): com.prgguru.android.Caller5.run (Caller5.java:28) で
10-20 18:02:04.156: W/System.err(1380): 原因: libcore.io.ErrnoException: 接続に失敗しました: ECONNREFUSED (接続が拒否されました)
10-20 18:02:04.177: W/System.err( 1380): libcore.io.Posix.connect(ネイティブ メソッド)
10-20 18:02:04.177: W/System.err(1380): libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
10- 20 18:02:04.197: W/System.err(1380): libcore.io.IoBridge.connectErrno(IoBridge.java:127) で
10-20 18:02:04.197: W/System.err(1380): でlibcore.io.IoBridge.connect(IoBridge.java:112)
10-20 18:02:04.217: W/System.err(1380): ... 11 より
10-20 18:02:04.217: E/(1380 ): ダウンロードに失敗しました
ここでは、retrieveFile を呼び出す前に FTP に接続する方法を示します。
public static boolean ftpConnect(String host, String username,
String password, int port) {
try {
mFTPClient = new FTPClient();
mFTPClient.connect(host, port);
if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
boolean status = mFTPClient.login(username, password);
mFTPClient.enterLocalPassiveMode();
mFTPClient.setFileTransferMode(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
return status;
}
} catch (Exception e) {
Log.d(TAG, "Error: could not connect to host " + host);
}
return false;
}
status はデータに対して TRUE を返します:
private static String host = "10.0.2.2";
private static String user = "MyCorrectNickname";
private static String password = "CorrectPassword";
間違ったパスワードを試行しました - false を返します。