jenya7 0 19 сентября, 2017 Опубликовано 19 сентября, 2017 · Жалоба Запускаю 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 19 сентября, 2017 Опубликовано 19 сентября, 2017 · Жалоба Если файл с таким именем существует на сервере то я бы еще обратил внимание на слеши в пути и вообще на путь, т.к. те сервера tftp которыми я пользовался выдавали файл из текущей директории (т.е. где запущен сервер). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 19 сентября, 2017 Опубликовано 19 сентября, 2017 · Жалоба Если файл с таким именем существует на сервере то я бы еще обратил внимание на слеши в пути и вообще на путь, т.к. те сервера tftp которыми я пользовался выдавали файл из текущей директории (т.е. где запущен сервер). такой файл существует C:\Users\General\Desktop\TFTP_DIR\data.txt и директория в сервере задана C:\Users\General\Desktop\TFTP_DIR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Barcooler 0 19 сентября, 2017 Опубликовано 19 сентября, 2017 · Жалоба такой файл существует 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 сервер клиенту не сообщает и по идее сам не должен лезть выше обозначенной папки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Если у тебя у 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 8 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Попробуйте вместо ascii режим binary. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Попробуйте вместо ascii режим binary. попробовал binary. printf("TFTP DATA = %s\n", buff); возвращает мусор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Barcooler 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 (изменено) · Жалоба Какую программу TFTP сервера используете? Возможно в настройках сервера необходимо указать вариант передачи. И другой вопрос - получается-ли отправить на TFTP сервер файлик, лежащий уже на устройстве? Если удаётся - получается-ли прочитать его содержимое на компе? Изменено 20 сентября, 2017 пользователем Barcooler Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Какую программу TFTP сервера используете? Возможно в настройках сервера необходимо указать вариант передачи. И другой вопрос - получается-ли отправить на TFTP сервер файлик, лежащий уже на устройстве? Если удаётся - получается-ли прочитать его содержимое на компе? пользуюсь tftpd64. попробую отправить файл на сервер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Barcooler 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба пользуюсь tftpd64. попробую отправить файл на сервер. Попробуй один и тот-же файл скопировать с сервера, а потом отправить обратно. Если содержимое останется читаемым - значит проблема в контроллере, либо в содержимом самого текстового файлика. Так-же попробуй создать текстовый файлик редактором типа sublime или notepad++ (если до этого файл создавался обычным блокнотом в винде). Содержимое файла постарайся сделать минимальным - например 123. Если такой файл прочитается девайсом - это будет говорить о том, что либо дело в кодировке, либо виндовый блокнот использует "запрещённые символы" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Попробуйте позвать lseek(file,0,SEEK_SET) перед read Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Barcooler 0 21 сентября, 2017 Опубликовано 21 сентября, 2017 · Жалоба Всё? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 сентября, 2017 Опубликовано 24 сентября, 2017 · Жалоба Всё? проблемы с системой. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 3 октября, 2017 Опубликовано 3 октября, 2017 (изменено) · Жалоба Тут выясняется что я должен быть сервер. А как мне создать директорию в 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? Изменено 3 октября, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 3 октября, 2017 Опубликовано 3 октября, 2017 · Жалоба Зачем вам директория в RAM? Зачем вам вообще файловая система? TFTP сервер должен принимать и отдавать файлы по имени, а где они будут лежать, и какие имена могут быть - это целиком внутреннее дело самого сервера. Считайте, что у вас все файлы лежат просто списком, но имя файла может содержать символ '/' https://ru.wikipedia.org/wiki/TFTP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться