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

안드로이드 ftp cilent 오류 질문드립니다.

0 추천
package com.example.heechan.ftp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import org.apache.commons.net.ftp.FTPClient;
import java.net.InetAddress;

public class MainActivity extends AppCompatActivity {
    FTPClient ftpClient = new FTPClient();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    ftpClient.connect(InetAddress.getByName("fpt address"),21);
                    ftpClient.login("test","test");
                    System.out.println("status :: " + ftpClient.getStatus());
                } catch (Exception ex) {
                    Log.d("FTP","Error: " + ex.getMessage());
                }
            }
        });
        thread.start();
    }
}
 

<오류>

 

09-19 23:32:43.774 22165-22189/com.example.mycom.ftp I/System.out:  Connected from ********* (**********)  // *에 해당하는 ip로 접속 완료
     Logged in as test   //test 계정으로 접속
     TYPE: ASCII, STRUcture: File, Mode: Stream
     No data connection 
    211 End of status
이와 같은 오류메시지가 출력되며 ftpClient.listDirectories()와 ftpCilent.listFiles()로 폴더/파일의 리스트를 출력해보려해도 출력이 되지 않습니다. (ftp 서버엔 확실히 폴더 및 파일이 존재합니다.)
 

 

 

익명사용자 님이 2018년 9월 20일 질문

1개의 답변

0 추천
 
채택된 답변
FTP 프로토콜이 정확하게 기억이 나지 않는데,

접속하면 Command 채널과 Data 채널이 연결이 됩니다. 소켓 두개가 연결이 되는 거죠.

인증과 명령은 Command 채널로 가고, 파일 목록이나 기타는 Data 채널로 오는 것 같은데, (오래되서 정확한 답변이 아닐 수 있습니다)

그리고 파일 전송을 하게 되면, 소켓이 추가로 또 생깁니다. 독특한 구조죠.

그래서 방화벽 설정하게 되면, FTP가 안되는 이유는 파일 전송을 위해 새로운 소켓 연결을 할 때마다 포트가 달라지기 때문이죠.

때문에 Data Channel이 연결이 안되면 제대로 통신이 안될 겁니다.

참고:

https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC_%EC%A0%84%EC%86%A1_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C
Will Kim (43,170 포인트) 님이 2018년 9월 20일 답변
...