Как реализовать Binary (TYPE I) для FTP - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно настроить команду TYPE; режим либо «Я» (для изображения), либо «А» (для ASCII). Чтобы проверить режим изображения / двоичного файла, попробуйте перенести файл изображения jpg / png с FTP-сервера. (создать собственный FTP-сервер)

Однако я не уверен, как это сделать, код ниже. Я в значительной степени скопировал команду stor / put, которая работает

В настоящее время, когда я пытаюсь получить изображение от локального хоста, полученное изображение имеет размер 0 байт.

Также обратите внимание: 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 Ответ

1 голос
/ 25 апреля 2019

Вы не должны отвечать на команду TYPE, инициируя передачу файла.Это то, что вы должны делать только после получения команды STOR.

Чтобы реализовать команду TYPE, вы просто отвечаете 200 OK и внутренне помните, что вам нужно использовать двоичный (или ascii) режим для предстоящей передачи файла (после получения STOR или RETR).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...