【问题标题】:FTP client java implementationFTP客户端java实现
【发布时间】:2013-04-02 13:06:09
【问题描述】:

我被 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();
    }
}

【问题讨论】:

  • 你想自己做一个FTP客户端吗?因为如果您只是在寻找一种连接到 ftp 服务器并进行一些操作的方法,您可以查看Apache Commons-Net,它具有集成的 FTP 客户端类
  • 我想自己做FTP客户端,不使用任何FTP客户端类。

标签: java ftp


【解决方案1】:

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

【讨论】:

  • 我想使用 FTP 客户端库,但我的任务是不使用任何客户端库。
  • 在这种情况下,您需要花一些时间阅读 RFC 959
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    参数字段由可变长度字符串组成 以字符序列结尾(回车,换行) 用于 NVT-ASCII 表示;对于其他协商的语言 a 可能会使用不同的行尾字符。应该注意 服务器将不采取任何行动,直到行代码结束 收到了。

    代替

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

    试试

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

    为我工作...

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 2011-08-27
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多