Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 23:37   #1
spat13
Новичок
Джуниор
 
Регистрация: 27.05.2011
Сообщений: 1
По умолчанию Ftp сервер, протокол фтп, наладить передачу файла

Необходимо написать фтп сервер. Пишу на сокетах С. Есть почти доделанная программа. Работает управляющий канал, принимаются, и отправляются команды. Но вот никак не получается обработать команду LIST, т.е. передачу списка файлов сервера. Вроде открывается другой порт, и идет передача.
Подскажите как должен передаваться список файлов от сервера к клиенту??
В долгу не останусь. Если кто-нибудь поможет довести до конца, материально помогу.

Код:
      
       
          while (1)
          {
              // передача команд
              e=recv(sc,rbuffer,sizeof(rbuffer),0);
              if ((e < 0) || (e == 0)) break;
       
       
       
       
              {
       
                  if (strncmp(rbuffer,"USER",4)==0) {
                  printf("---> User accept \n");
                  sprintf(sbuffer,"331 Password required \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
       
              }
       
              if (strncmp(rbuffer,"PASS",4)==0) {
                  printf("---> Pass accept \n");
                  sprintf(sbuffer, "230 Public logging in ok \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
       
              }
       
              if (strncmp(rbuffer,"SYST",4)==0) {
                  printf("---> Information about the system \n");
                  sprintf(sbuffer, "215 Deniska... \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
       
              }
       
              if (strncmp(rbuffer,"FEAT",4)==0) {
                  printf("---> Feat \n");
                  sprintf(sbuffer, "501 Syntax error: Command not understood \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
       
              }
       
              if (strncmp(rbuffer,"PWD",3)==0) {
                  printf("---> PWD \n");
                  sprintf(sbuffer, "257 \"/\"  is your current location \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
       
              }
       
              if (strncmp(rbuffer,"CWD",3)==0) {
                  printf("---> CWD \n");
                  sprintf(sbuffer, "257 \"/\" is  is working directory. \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
       
              }
       
              if (strncmp(rbuffer,"TYPE",4)==0) {
                  printf("---> TYPE\n");
                  sprintf(sbuffer, "200 Type set to I \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
       
              }
       
       
              if (strncmp(rbuffer,"PASV",4)==0) {
                  printf("---> Passive mode \n");
                  //change the IP address here if you want to connect from a remote machine
                  //227 has a strange format, for IP 127.0.0.1 and port 20 this is it...)
                  sprintf(sbuffer, "237 Passive Mode (%d,%d,%d,%d,%d,%d)\r\n",127,0,0,1,8,0);
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
                  sc_data = accept(s_data,(struct sockaddr *)(&remoteaddr),&addrlen);
                  printf("open socket 2000 to %s\n",inet_ntoa(remoteaddr.sin_addr));
       
       
       
              }
       
       
                    
              if (strncmp(rbuffer,"LIST",4)==0) {
                  printf("---> LIST \n");
       
       
                  //system("dir > tmp.txt");
                  fp=fopen("tmp.txt","r");
                  sprintf(sbuffer,"150 Connected accepted... \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
                  n=0;
                  while (!feof(fp)){
                      fgets(temp_buffer,78,fp);
                      sprintf(sbuffer,"%s ",temp_buffer);
                      send(sc_data, sbuffer, strlen(sbuffer), 0);
                      printf("%d\r\n",n++);
                  }
                  fclose(fp);
                      //sprintf(sbuffer, "local.c\n");
                      //bytes = send(sc_data, sbuffer, strlen(sbuffer), 0);
                  sprintf(sbuffer,"226 File transfer completed \r\n");
                  bytes = send(sc, sbuffer, strlen(sbuffer), 0);
                  printf("%s\n",sbuffer);
                  // system("del tmp.txt");
     
              }
spat13 вне форума Ответить с цитированием
Старый 04.06.2011, 15:12   #2
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

Я сейчас парюсь тоже на FTP сервере, но на делфи, я могу те скинуть исходники двух одинаковых серверов, только один на анг, другой на русском и слегка переделаный, посмотри исходники, протокол то почти один и тот же в реализации, только он не на сокетах они написаны
Вложения
Тип файла: zip FTP .zip (290.6 Кб, 51 просмотров)
Тип файла: rar FTP Server.rar (30.0 Кб, 52 просмотров)
darek13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка файла на FTP сервер через прокси Игорь С Microsoft Office Access 0 21.07.2010 12:57
Upload файла на ftp-сервер методом drag and drop olchick Работа с сетью в Delphi 1 13.07.2009 20:34
копирование обновленного файла с ftp на сервер dirrer Работа с сетью в Delphi 11 16.03.2009 17:07
Как осуществить передачу и прием пакета c клиента на сервер? IIpopoK Работа с сетью в Delphi 6 07.12.2008 14:10