gpt4 book ai didi

java - 在 Java 中调用 `500 Unknown Command` 时获取 `GET`

转载 作者:行者123 更新时间:2023-11-30 11:21:46 35 4
gpt4 key购买 nike

好吧,我得到了一个 Java FtpClient 类,我应该完成/修改它,以便最终产品将用作 WebServer。

下面是一个让我通过命令行与服务器交互的方法。

/*
* Send ftp command
* @param command: the full command line to send to the ftp server
* @param expected_code: the expected response code from the ftp server
* @return the response line from the ftp server after sending the command
*/
private String sendCommand(String command, int expected_response_code){
String response = "";
try {
// send command to the ftp server
controlWriter.writeBytes(command);

// get response from ftp server
response = controlReader.readLine();
if (DEBUG) {
System.out.println("Current FTP response: " + response);
}

// check validity of response
if (!response.startsWith(String.valueOf(expected_response_code)))
{
throw new IOException(
"Bad response: " + response);
}
} catch (IOException ex) {
System.out.println("IOException: " + ex);
}
return response;
}

但是,当我调用 GET 命令时,即

sendCommand("get "+ __file__name__ + "\r\l", 200);),

我得到以下响应:

500 Unknown command.

我几乎 100% 确定这个问题与我上面发布的方法无关,但我发布它只是为了让您知道我指的是 sendCommand 方法).

以前有没有人对这个命令有过类似的问题?如果是这样,您是如何解决的?

最佳答案

我已经完成了一个与您在这里所做的项目非常相似的副项目,并且我遇到了您在此处讨论的相同问题。我仍然没有弄清楚为什么我不能简单地调用 GET并读取数据流,但这是我的解决方法。

首先,您需要使用 RETR而不是 GET .如果您不熟悉什么 RETR确实如此,它基本上允许您通过临时 port 将文件作为字节数据包发送您将为数据传输生成。

实例化一个临时的port , 你需要是 im Passive Mode.所以,输入:

quote pasv

您的输出将如下所示:

227 Entering Passive Mode (127,0,0,1,143,155).

快速浏览两个括号之间显示的数字可能对您没有任何意义,但是,可以从中得出两个细节。

前 3 个数字代表您的 localhost这总是 127.0.0.1 , 另外两个被称为 p1p2 .在这种情况下,我们有 p1 = 143p2 = 155 .这两个数字可以用来找出哪个port已分配给我们进行数据传输。

启动你的 command line界面

要找出端口号,请将数字代入以下公式:

PORT = p1 * 256 + p2

因此,在本例中我们的端口号是 (143 * 256) + 155 ==> (36763).

现在我们有了转账 port为我们打开并准备好进行数据传输,您可以继续实例化一个新的 Socketport number从上面提到的公式得出(请注意,每次运行 quote pasv 时数字都会不同,所以不要假设这些是常量)。

这里的下一步是将文件从您自己发送到客户端。请注意,您并不是将数据包定向到特定客户端,而是当前连接的任何客户端都将接收数据包。

要发送文件,请输入以下命令:

quote retr

现在您可以使用 DataInputStream来自你的课 Socket读取所有字节,显示它们,然后将它们放入原始文件的相同副本中,或者执行您计划对它们执行的任何操作。

Note.. Note... Note... : the commands listed above were meant to be entered from the command line但是因为您希望您的应用程序处理所有工作(我假设),所以可以从您的 Java 应用程序传递相同的命令,只需稍微调整一下。您基本上只需要输入 quote 这个词。在我们使用过它们的所有命令中。

我想我今晚打的字已经够多了。我现在要去 sleep 了。如果您需要进一步的帮助,请在下面的评论中告诉我,我会尽快回复。另外,如果我所说的任何内容对您来说没有意义,请告诉我。

关于java - 在 Java 中调用 `500 Unknown Command` 时获取 `GET`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22089666/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com