2013-10-06 6 views
1

전에 비슷한 질문이 많이 있다는 것을 알고 있습니다. 나는 그것들 모두를 보았고 몇몇 FTP 서버를 변경하는 것을 포함한 모든 가능한 해결책을 시도했지만 여전히 나의 문제를 해결할 수 없었다. FTP 명령 줄에는 문제가 없습니다. 나는 또한 방화벽을 껐다. 여기 android FTPClient가 파일을 업로드 할 수 없습니다 - FTP 응답 421이 수신되었습니다. 서버 연결이 끊어졌습니다

 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/영업 매니저 (408) 밖으로 = D/영업 매니저 (408) : D/영업 매니저 (408 전 (408) D/영업 매니저를 만들) :
1 D/SalesManager (408) : 2013-10-06 12:07:39 D/SalesManager (408) : 1 D/SalesManager (408) : 617.25D/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) :
at 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) : at 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 내가 텍스트 파일을 성공적으로 다운로드했으나 텍스트 파일을 업로드하지 않았습니다. 테스트 도중 한 번 텍스트 파일 반 업로드를 완료했습니다. 빈 이름 파일이 서버에 작성되었습니다.

답변

0

사용 ftp4j이 문제를 해결했습니다. 커먼즈에서 며칠을 낭비했습니다 .ftpclient

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