我遇到了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();
}
}
答案 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");
为我工作......