Перейти к содержанию
    

Запускаю TFTP Server на стороне компьютера.

 

На стороне прибора создаю TFTP Client и пытаюсь скопировать файл с сервера.

STATUS TFTP_GetFile(char *host_adr, char *targ_file_name, char *dest_file_name)
{
    FILE *file;
    int result;
    
    file = open (dest_file_name, O_RDWR | O_CREAT, 0644);
    
    result = tftpCopy (host_adr, 0, targ_file_name, "get", "ascii", file);
    
    if (result == OK)
        printf("TFTP DATA OK\n");
    else
        printf("TFTP DATA TRANSFER FAIL\n");
    
    return result;
}

//в таске
TFTP_GetFile(server_ip, "C:/Users/General/Desktop/TFTP_DIR/data.txt", "test.txt");

получаю сообщение от сервера

Connection received from 10.0.0.10 on port 51398 [19/09 12:22:45.036]

Read request for file <C:/Users/General/Desktop/TFTP_DIR/data.txt>. Mode netascii [19/09 12:22:45.036]

File <C:\Users\General\Desktop\TFTP_DIR\data.txt> : error 123 in system call CreateFile The filename, directory name, or volume label syntax is incorrect. [19/09 12:22:45.036]

В чем может быть проблема? Мне кажется что файл не создается по каким то причинам.

file = open (dest_file_name, O_RDWR | O_CREAT, 0644);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если файл с таким именем существует на сервере то я бы еще обратил внимание на слеши в пути и вообще на путь, т.к. те сервера tftp которыми я пользовался выдавали файл из текущей директории (т.е. где запущен сервер).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если файл с таким именем существует на сервере то я бы еще обратил внимание на слеши в пути и вообще на путь, т.к. те сервера tftp которыми я пользовался выдавали файл из текущей директории (т.е. где запущен сервер).

такой файл существует C:\Users\General\Desktop\TFTP_DIR\data.txt

и директория в сервере задана C:\Users\General\Desktop\TFTP_DIR

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

такой файл существует C:\Users\General\Desktop\TFTP_DIR\data.txt

и директория в сервере задана C:\Users\General\Desktop\TFTP_DIR

Если у тебя у TFTP сервера корневая папка C:\Users\General\Desktop\TFTP_DIR\

То тебе в коде скорее всего надо написать просто

TFTP_GetFile(server_ip, "data.txt", "test.txt");

 

То есть TFTP клиент по умолчанию попадает в папку C:\Users\General\Desktop\TFTP_DIR\ и из нее должен забрать файлик data.txt

О структуре папок на твоём компе и тем более диске C: TFTP сервер клиенту не сообщает и по идее сам не должен лезть выше обозначенной папки.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у тебя у TFTP сервера корневая папка C:\Users\General\Desktop\TFTP_DIR\

То тебе в коде скорее всего надо написать просто

TFTP_GetFile(server_ip, "data.txt", "test.txt");

 

То есть TFTP клиент по умолчанию попадает в папку C:\Users\General\Desktop\TFTP_DIR\ и из нее должен забрать файлик data.txt

О структуре папок на твоём компе и тем более диске C: TFTP сервер клиенту не сообщает и по идее сам не должен лезть выше обозначенной папки.

спасибо! в этом была проблема. теперь я вижу сервер посылает файл. но я не могу прочесть содержимое. что то не так делаю

STATUS TFTP_GetFile(char *host_adr, char *targ_file_name, char *dest_file_name)
{
    FILE *file;
    
    int result;
    int len;
    
    file = open (dest_file_name, O_RDWR | O_CREAT, 0644);
    
    result = tftpCopy (host_adr, 69, targ_file_name, "get", "ascii", file);
    
    if (result == OK)
        {
             len = read(file, buff, size);
         printf("TFTP DATA = %s\n", buff);
        }
    else
        printf("TFTP DATA TRANSFER FAIL\n");
    
    return result;
}

//в таске
char read_buf[1024];
TFTP_GetFile(server_ip, "data.txt", "test.txt", read_buff, 20);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте вместо ascii режим binary.

попробовал binary. printf("TFTP DATA = %s\n", buff); возвращает мусор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какую программу TFTP сервера используете?

Возможно в настройках сервера необходимо указать вариант передачи.

И другой вопрос - получается-ли отправить на TFTP сервер файлик, лежащий уже на устройстве?

Если удаётся - получается-ли прочитать его содержимое на компе?

Изменено пользователем Barcooler

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какую программу TFTP сервера используете?

Возможно в настройках сервера необходимо указать вариант передачи.

И другой вопрос - получается-ли отправить на TFTP сервер файлик, лежащий уже на устройстве?

Если удаётся - получается-ли прочитать его содержимое на компе?

пользуюсь tftpd64. попробую отправить файл на сервер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пользуюсь tftpd64. попробую отправить файл на сервер.

Попробуй один и тот-же файл скопировать с сервера, а потом отправить обратно.

Если содержимое останется читаемым - значит проблема в контроллере, либо в содержимом самого текстового файлика.

Так-же попробуй создать текстовый файлик редактором типа sublime или notepad++ (если до этого файл создавался обычным блокнотом в винде).

Содержимое файла постарайся сделать минимальным - например 123.

Если такой файл прочитается девайсом - это будет говорить о том, что либо дело в кодировке, либо виндовый блокнот использует "запрещённые символы" :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут выясняется что я должен быть сервер. А как мне создать директорию в RAM?

Для NFS делают так

mkdir("/ram0/MFL_FILES");

if(nfsExport("/ram0/MFL_FILES" ,555,FALSE,0 ) == ERROR)
{
    printf("ERROR EXPORTING /ram0/MFL_FILES \n");
}
else
{
    printf("EXPORTING O.K. /ram0/MFL_FILES \n");    
}

cd("/ram0")

А как сделать для TFTP?

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем вам директория в RAM? Зачем вам вообще файловая система? TFTP сервер должен принимать и отдавать файлы по имени, а где они будут лежать, и какие имена могут быть - это целиком внутреннее дело самого сервера.

Считайте, что у вас все файлы лежат просто списком, но имя файла может содержать символ '/'

 

https://ru.wikipedia.org/wiki/TFTP

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...