Ver Mensaje Individual
  #6 (permalink)  
Antiguo 29/08/2013, 14:22
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 9 meses
Puntos: 83
Respuesta: Problema con cliente FTP en C

Te conectas a la ip con el puerto que recibes como respuesta al entrar en modo pasivo?

El STOR crea y escribe un archivo, sobreescribe si ya existe; el APPE crea un archivo, añadi si ya existe. La transferencia de un archivo de texto puedes hacerla en modo binario sin problemas.

La idea es la siguiente: abres un socket de dialogo (sd), lo conectas al servidor, le dices que quieres trabajar en modo pasivo, te responde con una ip y un puerto, y ahora viene el truco: creas otro socket con esos datos, será el socket de transferencia (st). Le dices por 'sd' que quieres crear un archivo (STOR), esperas la respuesta por 'sd', le envias el archivo por 'st', esperas la respuesta por 'st', cierras 'st' y teoricamente ya lo tienes.

Otra cosa que no tiene nada que ver con ftp:

Código C:
Ver original
  1. char *ficheroA;
  2. FILE *pFichero;
  3. char caracter;
  4.  
  5. pFichero=fopen("a.txt", "rb");
  6. while (!feof(pFichero)) {
  7.     caracter = fgetc(pFichero);
  8.     sprintf(ficheroA, "%s%c", ficheroA, caracter);//ojo con esta linea
  9. }
  10. fclose(pFichero);

¿Que es *ficheroA y que cantidad y tamaño de datos puede albergar? Es un puntero, por lo que suele ocupar 4 bytes, y es de tipo char que pesa 1 byte, con lo que sin provocar ningun error puedes guardar 4 caracteres (incluido el \0 final, es decir "qwe\0") pero no deberias hacerlo asi, ni tampoco es necesario que envies todo el archivo en una sola linea. Tienes que usar un char bff[512] (p.ej.), leer sizeof(bff) del archivo y enviarlos en un buce hasta que hayas leido todo el archivo. Ten en cuenta que la transimision del archivo la estas haciendo a traves de un puerto en el que ya te está esperando, por eso a traves del socket que conectas a ese puerto solo tienes que enviar el archivo (ni append, ni otro verbo).

Una cosa mas importante que todo eso: parsea las respuestas que recibas, tienen un codigo de error (un numero) y una descripcion, suele ser el numero seguido de un guion seguido del texto. Tokenizas por el guion y ya tienes el numero (mejor dicho, tienes los codigos del ambito de trabajo, no es un numero en si sino una combinacion de codigos de ambito). Seguramente por ahi podras encontrar la descripcion de esos valores.

Saludos
vosk