-2

既存のライブラリやサードパリティソリューションを使用せずに、FTPを使用してサーバーからファイルをダウンロードする必要があります。サーバーに接続してログインし、転送のタイプモード(ASCII)とパッシブモードをポストすることができたので、ポート番号を取得して新しいServerSocket(ポート)を開きました。しかし、RETR fileNameを呼び出すと、InputStream.readLine()でプログラムがブロックされます(サーバーポートの読み取りで、サーバーが応答しないことを意味します)RETRコマンドを呼び出す前に、忘れたことがありますか?

//PASV
outputStream.println("pasv");    

//227 Entering Passive Mode(a1,a2,a3,a4,p1,p2)
String response = inputStream.readLine();   

// port = p1*256 + p2
ServerSocket serverSocket = new ServerSocket(port);

//RETR fileName 
outputStream.println("retr "+ fileName);

//server no answer
String reply = inputStream.readLine()
4

2 に答える 2

0

FTP PASV コマンドはクライアント側でソケットを開きません。IP とポートはサーバーからクライアントに返され、基本的にクライアントに「この IP とポートで接続してください」と伝えます。実装の詳細については、RFC 959 をご確認ください。JAVA での FTP クライアントの実装は簡単なプロセスではありません。

于 2013-04-16T18:47:08.533 に答える