마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Apache 로 ESP32 FTP 서버에 접속하려고 하는데 login부터 예외처리가 발생하는데 다른 방법이 있는지요?

0 추천
Apache Commons Net 라이브러리로 FTP 서버에 접속해서 구현하려고 합니다

ESP32 FTP 서버에 접속시에

FTPClient.login(username, password) 에서 부터 try 예외처리가 발생합니다

보안도 없습니다. 다만 윈도우에서 FTP 서버로 접속은 잘 됩니다

다른 방법으로 아래 식으로 직접 커맨트를 전송해서 try 예외처리로 해서 접속하면 접속은 됩니다

물론 예외처리가 발생합니다.

try{

    FTPClient.sendCommand(FTPCmd.USER, username);

}catch (Exception e){
     Log.d(ftpTAG, "Couldn't connect to user : " + mFTPClient.getReplyString());

}

try{

    FTPClient.sendCommand(FTPCmd.PASS, password);

}catch (Exception e2) {
    Log.d(ftpTAG, "Couldn't connect to password : " + mFTPClient.getReplyString());

}

로 하면 각각 올바른 리턴 코드로 잘 됩니다.

그리고 아래 코드가 핵심인데

try{

    FTPFile[] ftpFiles = FTPClient.listFiles();

}catch (Exception e3) {

}

함수도 예외처리가 발생하지만 LIST는 디버깅으로 ESP32 FTP 서버에서 파일 리스트가 잘 보내지는건 확인했고 다만 리턴데이터를 못받아서 파일 리스트를 구현을 못하고 있습니다

다른 이유가 있을까요?
meteor24 (130 포인트) 님이 2023년 11월 21일 질문
meteor24님이 2023년 11월 21일 수정

2개의 답변

+2 추천
enterLocalPassiveMode 를 써서 Passive 모드로 접속하시면 되실 겁니다.
그래도 목록이 제대로 안나온다면 언어설정 확인 해보시면 되실 듯 하고요. 아래 주소 참조하세요

https://dogcowking.tistory.com/291
익명사용자 님이 2023년 11월 21일 답변
답변 감사합니다.
Passive 모드로 했고 적용은 되는데 FTPFile[] ftpFiles = FTPClient.listFiles(); try에서 예외처리가 되서 리턴 파일 리스트 데이터를 받아 올수가 없습니다
따른 방법으로 FTPClient.sendCommand("LIST") 이걸로 해서 받아 올수 있는 방법이 있는지요?
sendCommand(FTPCmd.LIST); 를 쓰시면 되긴 한데,   의미 없을 듯 합니다. 파일이 많아 타임 아웃 걸렸을 수도 있고, 다른 이유로 조회 자체가 안되었을 수도 있습니다. e3.printstacktrace() 로 list 호출 시 나오는 오류 로그를 확인 해 보세요.

http://www.java2s.com/example/java-src/pkg/com/atomicleopard/thundr/ftp/commons/ftp-88c88.html


https://stackoverflow.com/questions/72804695/why-can-i-retrieve-file-names-but-not-file-objects-from-the-ftp-server
0 추천
안드로이드에서  FTP에 직접 접속하는건 흔하지 않습니다. 이론 경우는 콘솔에서 나오는 메세지와 디버깅에 의존할 수 밖에 없습니다.
그리고 혹시나해서 그러는데 FTP서버는 IO쓰레드에서 접속하셨죠?
spark (223,680 포인트) 님이 2023년 11월 21일 답변
네! 쓰레드에서 접속 했습니다~
콘솔 메세지에서만 가능하다면 FTPClient.listFiles(); 명령을
FTPClient.sendCommand("LIST"); 에서 할수 있는거 같은데
여기서 리턴 파일 리스트 데이터를 받을 방법이 있을까요?
에러가 있다고 하셨는데, 어떤 에러인지 확인해 보셨나요?
보안이 없다고 하셨는데, 무슨 말씀이신지 모르겠네요. 로그인시에 에러가 나면 그 부분도 잘 체크해 보세요. 로그인부터 문제가 생기면 리스트를 잘 가져올 수가 없을 것 같은데요.
답변 감사합니다.

FTPClient.login(username, password);
이거 대신에
FTPClient.sendCommand(FTPCmd.USER, username);
FTPClient.sendCommand(FTPCmd.PASS, password);
위 2개의 커맨트를 전송해서 로그인 까지 되는건 성공했습니다.
다만 둘다 try catch 예외처리가 되서 에러는 납니다.

FTPFile[] ftpFiles = FTPClient.listFiles();
이것도 try catch 예외처리가 되서 에러나는데 혹시 FTPClient.sendCommand("LIST");
커맨트로 해서 파일리스트 받아오는 방법이 있는지요?
다시 말씀드리지만 먼저 에러가 뭔지 확인하셔야 해요. 어디서 어떤 에러가 나는지를 알아야 해결방법도 찾으실 수 있어요. 그리고 커맨드 모드용 아닌 걸로 했을 때 에러를 확인하세요.
...