Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中调用“GET”时获取“500未知命令”_Java_Sockets_Ftp - Fatal编程技术网

在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;
}