1

FTP クライアントの Java 実装に行き詰まりました。FTP サーバーに接続して、1 つのファイルをサーバーに転送するだけです。

ftp サーバーとの接続に成功し (以下のコードを参照)、その後、PASV コマンドでパッシブ モードに入りました。今、私は次に何をすべきかわかりません。PASV コマンドの後に新しいソケットを作成し、それを FTP サーバーのポート 20 に接続しようとしましたが、うまくいきませんでした。

私の質問は、接続が確立されたときにファイル転送を開始する方法ですか? (私の考えでは、ポート 20 に接続して STOR コマンドを実行することですが、方法がわかりません)。

アイデアや役立つアドバイスはありますか?

ところで。FTPClient のような Java クラスを使用せずにこれを実装する必要があります

これが私のコードです:

   public class FTPtest {

    Socket socket;
    PrintWriter pw;
    BufferedReader input;
    String info = "";

    public FTPtest(){
        try{
            socket = new Socket("some_ftp_server", 21);
            logUsername();
            closeEverything();
        }
        catch(IOException ioe){
            System.out.println("error");
        }
    }

    public void logUsername()throws IOException{
        input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        pw = new PrintWriter(socket.getOutputStream());

        //user
        pw.write("USER some_user\n");
        pw.flush();
        System.out.println(input.readLine());

        //pass
        pw.write("PASS some_pass");
        pw.flush();
        System.out.println(input.readLine());
        System.out.println(input.readLine());

        //PASV
        pw.write("PASV");
        pw.flush();
    }

    public void closeEverything() throws IOException{
        input.close();
        pw.close();
        socket.close();
    }
    public static void main(String[]args){
        new FTPtest();
    }
}
4

3 に答える 3

1

既存の FTP クライアント ライブラリを使用することをお勧めします。PASV リクエストについては、それに応答するサーバーは、データ接続のために接続する必要があるエンコードされた IP アドレスとポートを返します。

于 2013-04-10T15:42:48.690 に答える
0

私は同じ問題にぶつかりました。RFC 959 を読んで気づいたこと:

引数フィールドは、NVT-ASCII 表現の文字シーケンス (キャリッジ リターン、ライン フィード) で終わる可変長文字列で構成されます。他のネゴシエートされた言語では、別の行末文字が使用される場合があります。サーバーは、行末コードを受信するまで何のアクションも実行しないことに注意してください。

それ以外の

pw.write("USER some_user\n");

試す

pw.write("USER some_user\r\n");

私のために働いた...

于 2013-11-29T00:25:34.763 に答える
0

構文と応答の詳細については、RFC 959 を参照してください。完全な FTP クライアントを Java で実装するのは簡単ではなく、かなりの時間がかかります。FTP/FTPs プロトコルの堅牢な実装のために、JSCAPE のSecure FTP Factoryの使用を検討してください。これは、サンプルコードを示すドキュメントです。

于 2013-04-16T16:45:17.000 に答える