реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Работа с TFTP.
Jenya7
сообщение Sep 19 2017, 09:41
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Запускаю 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);
Go to the top of the page
 
+Quote Post
Lagman
сообщение Sep 19 2017, 11:01
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Если файл с таким именем существует на сервере то я бы еще обратил внимание на слеши в пути и вообще на путь, т.к. те сервера tftp которыми я пользовался выдавали файл из текущей директории (т.е. где запущен сервер).
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 19 2017, 14:25
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Lagman @ Sep 19 2017, 17:01) *
Если файл с таким именем существует на сервере то я бы еще обратил внимание на слеши в пути и вообще на путь, т.к. те сервера tftp которыми я пользовался выдавали файл из текущей директории (т.е. где запущен сервер).

такой файл существует C:\Users\General\Desktop\TFTP_DIR\data.txt
и директория в сервере задана C:\Users\General\Desktop\TFTP_DIR
Go to the top of the page
 
+Quote Post
Barcooler
сообщение Sep 19 2017, 20:24
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 7-03-11
Из: Владимир
Пользователь №: 63 445



Цитата(Jenya7 @ Sep 19 2017, 17:25) *
такой файл существует 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 сервер клиенту не сообщает и по идее сам не должен лезть выше обозначенной папки.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 20 2017, 06:46
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Barcooler @ Sep 20 2017, 02:24) *
Если у тебя у 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);
Go to the top of the page
 
+Quote Post
gerber
сообщение Sep 20 2017, 06:54
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



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


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 20 2017, 07:28
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(gerber @ Sep 20 2017, 12:54) *
Попробуйте вместо ascii режим binary.

попробовал binary. printf("TFTP DATA = %s\n", buff); возвращает мусор.
Go to the top of the page
 
+Quote Post
Barcooler
сообщение Sep 20 2017, 09:15
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 7-03-11
Из: Владимир
Пользователь №: 63 445



Какую программу TFTP сервера используете?
Возможно в настройках сервера необходимо указать вариант передачи.
И другой вопрос - получается-ли отправить на TFTP сервер файлик, лежащий уже на устройстве?
Если удаётся - получается-ли прочитать его содержимое на компе?

Сообщение отредактировал Barcooler - Sep 20 2017, 09:16
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 20 2017, 09:29
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Barcooler @ Sep 20 2017, 15:15) *
Какую программу TFTP сервера используете?
Возможно в настройках сервера необходимо указать вариант передачи.
И другой вопрос - получается-ли отправить на TFTP сервер файлик, лежащий уже на устройстве?
Если удаётся - получается-ли прочитать его содержимое на компе?

пользуюсь tftpd64. попробую отправить файл на сервер.
Go to the top of the page
 
+Quote Post
Barcooler
сообщение Sep 20 2017, 09:54
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 7-03-11
Из: Владимир
Пользователь №: 63 445



Цитата(Jenya7 @ Sep 20 2017, 12:29) *
пользуюсь tftpd64. попробую отправить файл на сервер.

Попробуй один и тот-же файл скопировать с сервера, а потом отправить обратно.
Если содержимое останется читаемым - значит проблема в контроллере, либо в содержимом самого текстового файлика.
Так-же попробуй создать текстовый файлик редактором типа sublime или notepad++ (если до этого файл создавался обычным блокнотом в винде).
Содержимое файла постарайся сделать минимальным - например 123.
Если такой файл прочитается девайсом - это будет говорить о том, что либо дело в кодировке, либо виндовый блокнот использует "запрещённые символы" biggrin.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 20 2017, 10:28
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Попробуйте позвать lseek(file,0,SEEK_SET) перед read
Go to the top of the page
 
+Quote Post
Barcooler
сообщение Sep 21 2017, 20:15
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 7-03-11
Из: Владимир
Пользователь №: 63 445



Всё?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 24 2017, 12:38
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Barcooler @ Sep 22 2017, 02:15) *
Всё?

проблемы с системой. sad.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 3 2017, 08:11
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Тут выясняется что я должен быть сервер. А как мне создать директорию в 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 - Oct 3 2017, 08:12
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 3 2017, 10:00
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



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

https://ru.wikipedia.org/wiki/TFTP
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 09:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01505 секунд с 7
ELECTRONIX ©2004-2016