在Java中调用“GET”时获取“500未知命令”
好的,我得到了一个在Java中调用“GET”时获取“500未知命令”,java,sockets,ftp,Java,Sockets,Ftp,好的,我得到了一个JavaFtpClient类,我应该完成/修改这个类,以便完成的产品可以作为一个web服务器 下面是一个让我通过命令行与服务器交互的方法 但是,当我调用GET命令时 sendCommand(“获取”+\uuuuu文件名”\uuuuu+“\r\l”,200)) 我得到以下回应: 500未知命令 我几乎100%确信这个问题与我上面发布的方法无关,但我发布它只是为了让您知道我所指的sendCommand方法) 以前是否有人对此命令有类似问题?如果是这样的话,你是如何解决的?我做了一个
Java
FtpClient类,我应该完成/修改这个类,以便完成的产品可以作为一个web服务器
下面是一个让我通过命令行与服务器交互的方法
但是,当我调用GET
命令时
sendCommand(“获取”+\uuuuu文件名”\uuuuu+“\r\l”,200)代码>)
我得到以下回应:
500未知命令
我几乎100%确信这个问题与我上面发布的方法无关,但我发布它只是为了让您知道我所指的sendCommand
方法)
以前是否有人对此命令有类似问题?如果是这样的话,你是如何解决的?我做了一个与你在这里做的项目非常相似的副项目,我遇到了与你在这里讨论的问题相同的问题。我仍然没有弄明白为什么我不能简单地调用GET
并读取数据流,但我的方法是这样的
首先,您需要使用RETR
而不是GET
。如果您不熟悉RETR
的功能,它基本上允许您通过将为数据传输生成的临时端口以字节包的形式发送文件
要实例化临时端口
,您需要处于im被动模式。
因此,键入:
引用pasv
您的输出将如下所示:
227进入被动模式(127,0,0,1143155)
快速浏览两个括号之间显示的数字可能对您没有任何意义,但是,可以从中得出两个细节
前3个数字表示您的localhost
,它始终是127.0.0.1
,另外两个数字分别指p1
和p2
。在这种情况下,我们有p1=143
和p2=155
。这两个数字可用于确定已分配给我们用于数据传输的端口
启动命令行
界面
要找出端口号,请插入以下公式中的数字:
端口=p1*256+p2
因此,在这种情况下,我们的端口号是(143*256)+155
==>(36763)。
现在我们有一个传输端口
为我们打开并准备好进行数据传输,您可以继续并实例化一个新的套接字
,其端口号
来自上述公式(请注意,每次运行quote pasv
,数字都会不同,因此不要假设这些是常量)
这里的下一步是将文件从您自己发送到客户端。请注意,您并不是将数据包定向到特定的客户端,而是当前连接的任何客户端都将接收数据包
要发送文件,请键入以下命令:
报价表
现在,您可以使用套接字中的DataInputStream
类读取所有字节,显示它们,然后将它们放入原始文件的相同副本中,或者执行您计划对它们执行的任何操作
Note..Note..Note…:上面列出的命令是从命令行输入的
,但由于您希望应用程序处理所有作业(我假设),同样的命令也可以通过Java应用程序传递,只需稍加调整即可。基本上,您只需从我们使用过的所有命令中去掉quote
我想我今晚已经打够了。我现在要睡觉了。如果您需要进一步的帮助,请在下面的评论中告诉我,我会尽快回复。另外,如果我说的话对您没有意义,请告诉我。“\r\l”看起来有点奇怪。这应该是回车和换行吗?”\r\n?如果您连接到Microsoft FTP服务器,这意味着无效端口
getCommand
实际上是sendCommand
?不确定“\r\n”应该做什么,但我被告知他们必须在每一次访问结束时离开command@user2310289我正在Linux上使用vsftpd
包
/*
* 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;
}