FTP客户端java实现

时间:2013-04-10 15:27:07

标签: java ftp

我遇到了FTP客户端java实现。 我所要做的就是连接到FTP服务器并将一个文件传输到服务器。

我设法与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();
    }
}

3 个答案:

答案 0 :(得分:1)

您最好使用已存在的FTP客户端库。 对于PASV请求 - 服务器在回答它时返回编码的IP地址和端口,您应该连接到该数据连接。

答案 1 :(得分:0)

请查看RFC 959以获取语法和响应详细信息,在Java中实现完整的FTP客户端并非易事,并且需要相当长的时间。考虑使用JSCAPE的Secure FTP Factory来实现FTP / FTP协议的强大实现。以下是显示示例代码的documentation

答案 2 :(得分:0)

我遇到了同样的问题。阅读RFC 959我注意到了:

  

参数字段由可变长度字符串组成   以字符顺序结束(回车,换行)   用于NVT-ASCII表示;其他谈判语言   可以使用不同的行尾字符。应该指出   服务器在行代码结束之前不采取任何操作   接收。

而不是

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

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

为我工作......