以前にも似たような質問がたくさんあったことは知っています。それらすべてを調べ、いくつかの FTP サーバーを変更するなど、考えられるすべての解決策を試しましたが、それでも問題を解決できませんでした。ただし、FTP コマンド ラインには問題はありません。ファイアウォールもオフにしました。ここに私のコードスニペットがあります:
ftpClient.login(username, password);
int mode = ftpClient.getDataConnectionMode();
if(mode == ftpClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE)
ftpClient.enterLocalPassiveMode();
else if(mode == ftpClient.ACTIVE_LOCAL_DATA_CONNECTION_MODE)
ftpClient.enterLocalActiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
//ftpClient.setPassiveNatWorkaround(false);
if(LOGD) Log.d("before create out");
String out = orderToString();
if(LOGD) Log.d("out="+out);
InputStream stream = new ByteArrayInputStream(out.getBytes("UTF-8"));
if(LOGD) Log.d("before upload orders.xml");
boolean res = ftpClient.storeFile("orders.xml", stream);
if(!res) Log.d("store file failed");
ftpClient.completePendingCommand();
stream.close();
ログキャットは次のとおりです。
...................................................
D/SalesManager( 408): 作成前 out D/SalesManager( 408): out= D/SalesManager( 408): D/SalesManager( 408):
1 D/SalesManager( 408): 2013-10-06 12:07:39 D/SalesManager( 408): 1 D/SalesManager( 408): 617.25 D/SalesManager( 408): D/SalesManager( 408): D/ SalesManager(408): orders.xml をアップロードする前に D/SntpClient(60): 要求に失敗しました: java.net.SocketException: アドレス ファミリはプロトコルでサポートされていません W/System.err(408): org.apache.commons.net. ftp.FTPConnectionClosedException: FTP 応答 421 を受信しました。サーバーが接続を閉じました。D/SntpClient(60): リクエスト時間に失敗しました: java.net.SocketException: プロトコル MainActivity$LoadAsyncTask.doInBackground(MainActivity.java:1) W/System.err(408) でサポートされていないアドレス ファミリ: android.os.AsyncTask で$2.call(AsyncTask.java:185) W/System.err(408):
java.util.concurrent.FutureTask$Sync で。innerRun(FutureTask.java:305) W/System.err(408): java.util.concurrent.FutureTask.run(FutureTask.java: 137) で W/System.err(408): java.util.concurrent で。 ThreadPoolExecutor。runWorker(ThreadPoolExecutor.java:1068) W/System.err(408): java.util.concurrent.ThreadPoolExecutor$Worker で。実行 (ThreadPoolExecutor.java:561) W/System.err(408): java.lang.Thread.run(Thread.java:1096) で
...................................
EDITテキストファイルを正常にダウンロードしたことはありますが、テキストファイルをアップロードすることはありません。テスト中に、テキスト ファイルのアップロードが半分完了したことがあります。サーバー上に同じ名前の空のファイルが作成されます。