1

我知道以前有人问过很多类似的问题。我查看了所有这些并尝试了所有可能的解决方案,包括更改了几个 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): 在创建之前 D/SalesManager(408): out= D/SalesManager(408): D/SalesManager(408):
1 D/SalesManager(408):2013-10-06 12:07:39 D/SalesManager(408):1D/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。线程池执行器。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)

.....................

编辑我曾经成功下载文本文件,但从未通过上传文本文件。在测试期间,我曾经上传过一半的文本文件——在服务器上创建了一个空的同名文件。

4

2 回答 2

0

使用ftp4j解决了这个问题。在 commons.ftpclient 上浪费了几天

于 2013-10-06T23:29:39.463 回答
0

我通过删除 completePendingCommand() 成功地将文件上传到 FTP 服务器。只需 storeFile + getReplyCode 即可检查响应代码。

ftpClient.setDefaultTimeout(1000*60);
ftpClient.connect(server, port);
ftpClient.login(user, pass);

int replyCode=ftpClient.getReplyCode();
//log or check response

ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

InputStream inputStream=new FileInputStream(zipFile);
ftpClient.storeFile(zipFile.getName(), inputStream);
inputStream.close();

replyCode=ftpClient.getReplyCode();
//log or check response
于 2015-12-15T15:46:08.447 回答