【发布时间】:2018-04-03 21:51:55
【问题描述】:
这是我第一次编写标准化协议客户端,请多多包涵。
我正在尝试向 ftp 服务器发送 USER 命令,但我不断收到 500 Command not understood. 作为响应。
这是我的发送功能:
private static String SendToServer(PrintWriter server_output, BufferedReader server_input, String message)
{
String server_response = null;
try {
server_output.println(message);
server_response = server_input.readLine();
if (server_response == null) {
System.err.println("Error #2: Lost connection");
return "";
}
}
catch (IOException e)
{
System.err.println("Error #9999: Unexpected exception: "+ e.getMessage());
}
System.out.println("# " + server_response);
return server_response.toString();
}
我是这样调用函数的:
SendToServer(server_out, server_in, ""); //An empty command tries to establish a connection
SendToServer(server_out, server_in, "USER anonymous"); //Tries to "log in" anonymously
这是输出:
# 220 Microsoft FTP Service
# 500 Command not understood.
问题是:为什么我会收到 500 Command not understood. 回复?
编辑:我尽可能多地做大学作业,我不能使用任何现有的 ftp 库
【问题讨论】:
-
您是否有理由要手动编写代码?有很多知名的 FTP 客户端库,例如 Apache Commons FTPClient
-
您的代码似乎没问题。您可以尝试两件事:1)在
println()调用之后刷新PrintWriter和2)尝试在命令提示符/shell 中使用相同的命令连接到服务器。在 Windows 中,您可以使用ftp -n <host>。这是为了确保它不是服务器端问题。 -
我不明白您为什么认为“一条空消息试图建立连接”?您实际上发送的是空消息。所以很可能 500 错误消息是对空消息的响应,而不是对
USER命令的响应。 -
@MartinPrikryl 编辑:抱歉,做了更多测试,你是对的。谢谢! 旧回复: ftp 的工作方式是任何第一条消息都会建立 TCP 连接,或者更准确地说 - 服务器返回 220 就绪 回复。如果我首先发送 USER 命令,它只会将其解释为尝试连接并返回 220 忽略我发送的任何命令字符串。 (至少这是测试和我的业余理解向我展示的)
-
空消息不会“尝试建立连接”。它甚至没有发送。不清楚你在问什么。