2011-11-15 1 views
0

Java로 작성된 간단한 FTP 클라이언트와 proFTP 서버 간의 FTP 세션과 관련된 몇 가지 문제점이 있습니다.Java의 간단한 FTP 클라이언트가 수동 모드에서 "list"명령을 한 번만 보낼 수 있습니다.

나는 수동 모드를 사용하여 서버에 연결했습니다. list 명령을 보낼 때 서버에있는 파일의 ASCII 응답을받습니다. list 명령을 다시 보내면 응답이 없습니다. 나는 심지어 내가 보내는 다른 FTP 명령들로부터 응답을 얻을 수 없다. 세션이 멈추는 것처럼 보입니다.

list 명령을 다시 전송할 때 내 간단한 Java 응용 프로그램이 응답을 멈추는 이유는 무엇입니까?

답변

1

FTP에서 활성 및 수동 모드는 모두 데이터 전송을위한 별도의 채널을 제공합니다. 데이터 전송과 관련된 수동 모드에서 명령 (예 : list)을 보내려면 PASV을 다시 보내야 데이터 연결과 관련된 작업을 수행 중이라고 서버에 알릴 수 있습니다. 그런 다음 서버는 새 소켓을 열거 나 동일한 소켓을 계속 사용할 수 있습니다. 내 두 번째 시도가 나는 데이터 채널을 개방하지 않았기 때문에 LIST 실패 사용하는

230 Login successful. 
PASV 
227 Entered Passive Mode (123,245,209,137,199,61) 
LIST 
150 Here comes the directory listing. 
226 Directory send OK. 
LIST 
425 Use PORT or PASV first. 
PASV 
227 Entered Passive Mode (123,245,209,137,202,198) 
LIST 
150 Here comes the directory listing. 
226 Directory send OK. 

주의 사항 :

는 여기에 예제 세션입니다. PASV을 다시 보내면 LIST을 다시 사용할 수있었습니다.

+0

고마워요! 그것은 효과가있다! 각 데이터 채널에 대해 PASV를 보내야한다는 것을 알지 못했습니다. 따라서 FTP 클라이언트는 수동 모드와 활성 모드에서 동시에 작동 할 수 있습니까? – Rox

+0

물론 일부 FTP 서버는 지원하지 않습니다. 보통 가능합니다. PASV는 요즘 거의 표준 모드입니다. 왜냐하면 대부분의 사용자가 NAT 라우터 뒤에 있기 때문입니다. – Polynomial