Hi!
Возникла необходимость написать прогу которая коннектиться к ftp серверу и приозводит на нём некоторые действия. НО не могу залогиниться!!!!! Возможно кусочек кода поможет ответить на вопрос. Зараннее спасибо!
/*
тут я открываю сокет, произвожу коннект и т.д.
*/
printf("CONNECT!!!\n");read(sockfd, otvet, sizeof(otvet)); /*sockfd дескриптор otvet это char[200]*/
printf("%s", otvet);
snprintf(buff, sizeof(buff), "USER anonymous\r\n");
write(sockfd, buff, sizeof(buff)); /*char buff[200]*/
printf("%s", buff);
read(sockfd, otvet, sizeof(otvet));
printf("%s", otvet);
snprintf(buff, sizeof(buff), "PASS anonymous\r\n");
write(sockfd, buff, sizeof(buff));
printf("%s", buff);
read(sockfd, otvet, sizeof(otvet));
printf("%s", otvet);
printf("\n");
return 0;/*
Причём "USER anonymous" получает и не ругаеться а говорю PASS мне сообщают что надо залогиниться использую USER PASS.
Просто уже не знаю в чем же дело!
*/
>snprintf(buff, sizeof(buff), "USER anonymous\r\n");
>write(sockfd, buff, sizeof(buff)); /*char buff[200]*/
И зачем ты ему туда 200 байт напихал ?>snprintf(buff, sizeof(buff), "PASS anonymous\r\n");
>write(sockfd, buff, sizeof(buff));
Та же самая фигня - передавай только ту информацию которую надо, а несь буфер - в нем мусора до вола.Плюс к тому к качестве пароля неплохо использовать нечто похожее не email - строчку с собачкой
>/*
>Причём "USER anonymous" получает и не ругаеться а говорю PASS мне сообщают
>что надо залогиниться использую USER PASS.
>Просто уже не знаю в чем же дело!
>*/P.S проще было-бы все это сделать на expect`е ...
Спасибо большое....
Совет из моего личного опыта, сделай так (просто рази удобства):FILE* sockf;
sockf = fdopen (sockfd, "r+");
fputs (sockf, "USER anonymous\r\n");
... и так далее.
Всем большое спасибо.. сейчас уже много работает, но есть проблемма до решения которой я никак не могу додуматься...Проблема такая : нужно получить список ВСЕХ файлов и директорий с ftp сервера. Как это начал раелизовывать я и на чём остановился: 1 получаю список файлов и с помошью функции sscanf() понимаю что первый файл являеться директорией или обычным файлом (drwxrwxrwx) а из конца беру имя этого файли и если эта директория то говорю cwd "%s" dirname таким образом я дохожу до того момента когда директории заончаться (опято же я простоматриваю только первую директорию в первой директории и т.д. ну а это меня не устраивает так как нужно получить полный список файлов) подскажите пожалуйста советом или ссылкой буду крайне признателен!!!
>Всем большое спасибо.. сейчас уже много работает, но есть проблемма до решения
>которой я никак не могу додуматься...Проблема такая : нужно получить список
>ВСЕХ файлов и директорий с ftp сервера. Как это начал раелизовывать
>я и на чём остановился: 1 получаю список файлов и с
>помошью функции sscanf() понимаю что первый файл являеться директорией или обычным
>файлом (drwxrwxrwx) а из конца беру имя этого файли и если
>эта директория то говорю cwd "%s" dirname таким образом я дохожу
>до того момента когда директории заончаться (опято же я простоматриваю только
>первую директорию в первой директории и т.д. ну а это меня
>не устраивает так как нужно получить полный список файлов) подскажите пожалуйста
>советом или ссылкой буду крайне признателен!!!
Обычный рекурсивный обход дерева - что тут такого ?
(типа псевдокод)
получаем список файлов текущего каталога,
для каждого файла
если это симлинк на каталог, то в первом варианте игнорируем
если это каталог - cd в него, рекурсивный вызов
если обычный файл - добавляем в полный список
(все - получен список всех файлов)
собственно остается решить что делать с символическими ссылками, для избежания зацикливания и + возможно физически огранить глубину рекурсии,
по тем же соображениям.
>Обычный рекурсивный обход дерева - что тут такого ?
>(типа псевдокод)
>получаем список файлов текущего каталога,
>для каждого файла
> если это симлинк на каталог, то в первом варианте игнорируем
>
> если это каталог - cd в него, рекурсивный вызов
> если обычный файл - добавляем в полный список
>(все - получен список всех файлов)
>собственно остается решить что делать с символическими ссылками, для избежания зацикливания и
>+ возможно физически огранить глубину рекурсии,
>по тем же соображениям.Дело в том что это достаточно непросто в реализации из за того что
1 как можно наверное понять из моих вопросов я только недавно начал всерьез заниматься программированием
2 Если представить работу программы что мы видим: получаем список файлов берём первый и проверяем директория это или нет. Если да то говорим cwd <имя директории> и попадаем в неё. В ней тоже огромное количество директорий из которых я выбираю первыую и вхожу туда. Как предлагаеться действовать когда дойдем до того момента когда директории закончаться? Или я принципиально чего то не понимаю и ошибка в самом методе???
потренеруйтесь на локальной файловой системе ;-)
( если память не изменяет, то в info про opendir есть пример с рекурсивным обходом)
почитайте книжек, посмотрите что такое рекурсия..
Рано видимо Вы деретесь за работу с удалёнными системами :(