如何为FTP实现Binary(TYPE I)

时间:2019-04-25 13:46:48

标签: c++ gcc ftp

我需要设置TYPE命令;模式是“ I”(用于图像)或“ A”(用于ASCII)。要测试图像/二进制模式,请尝试从FTP服务器传输jpg / png图像文件。 (创建自己的FTP服务器)

但是,我不确定如何执行此操作,下面是一些代码。我几乎复制了stor / put命令-起作用

当前,当我尝试从本地主机获取图像时,收到的图像大小为0 byes。

还请注意:bytes = recv(ns,&receive_buffer [n],1,0); //逐字节接收...在我的框架/启动代码中。

...

if(strncmp(receive_buffer,"TYPE",4) == 0){ //attempt
         int bytesRecieved1 = 0;
        char codeStr[250];
        sscanf(receive_buffer,"TYPE %c\r\n",codeStr);
        char code = codeStr[0];
         char tempBuff[SEGMENT_SIZE];
        memset(tempBuff,0, sizeof(tempBuff));
        int _bytes1 = 0;
        switch(code){
            case 'I': //
                sprintf(send_buffer, "200 Switching to Binary mode\r\n");
                 while (1){
                if(active == 0) {
                    _bytes1 = recv(ns, &receive_buffer[n], 1, 0);
                }else{
                    _bytes1 = recv(ns, &receive_buffer[n], 1, 0);
                }

                if (_bytes1 < 0) {
                    sprintf(send_buffer,"226 Successfully received %d bytes\r\n",bytesRecieved1);
                    bytes = sendString(&ns,send_buffer);
                    printf("Success");
                    break;
                    bytesRecieved1 += _bytes1;
                }
            }
        }
        bytes = sendString(&ns,send_buffer);
        return;
    }

...

应该能够看到图像。

1 个答案:

答案 0 :(得分:1)

您不应通过启动文件传输来响应TYPE命令。只有在收到STOR命令后,才应该这样做。

要实施TYPE命令,您只需响应200 OK并在内部记住,您需要对即将进行的文件传输使用二进制(或ascii)模式(一旦收到STOR或{ {1}}。