C/Visual C - ftp con c/c++

 
Vista:

ftp con c/c++

Publicado por elMutante (1 intervención) el 13/08/2003 08:43:47
quiero aprender a manejar los puertos de un servidor de ftp con una aplicacion.

hay colgados de un servidor ftp, archivos de texto que son ejercicios para alumnos. mi aplicacion convierte esos archivos de texto en un formato mas visual para el alumno, quiero que la aplicacion se conecte via ftp y baje los archivos del servidor.

es masomenos como un pequeño cliente de ftp. si alguien puede ayudarme, por favor contestarme. gracias
saludos elMutante
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cómo crear un cliente FTP básico en C para descargar archivos desde un servidor

Publicado por Alejandro (1286 intervenciones) el 23/07/2025 18:54:33
Hola, elMutante. Para hacer un cliente FTP en C que se conecte a un servidor, navegue por los archivos y descargue archivos de texto, tienes varias opciones. La más sencilla y portable es usar la API de Windows si estás en ese entorno, o librerías externas si quieres algo más flexible.

Aquí te doy una idea general y un ejemplo básico usando la API de Windows con `WinINet`, que es bastante sencilla para tareas de FTP.

---

Usando WinINet en Windows



La librería `wininet.lib` permite gestionar conexiones FTP fácilmente. Aquí tienes un ejemplo simple para conectarte, listar archivos y descargar uno:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
 
#pragma comment(lib, "wininet.lib")
 
int main() {
    HINTERNET hInternet = InternetOpen(TEXT("MiClienteFTP"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (!hInternet) {
        printf("Error en InternetOpen\n");
        return 1;
    }
 
    // Conectarse al servidor FTP
    HINTERNET hFtpSession = InternetConnect(hInternet, TEXT("ftp.tuservidor.com"), 21, TEXT("usuario"), TEXT("contraseña"), INTERNET_SERVICE_FTP, 0, 0);
    if (!hFtpSession) {
        printf("Error en InternetConnect\n");
        InternetCloseHandle(hInternet);
        return 1;
    }
 
    // Listar archivos (opcional)
    // Aquí puedes usar FtpFindFirstFile, FtpGetFile, etc.
 
    // Descargar un archivo
    const char *archivoRemoto = "/ejercicios/ejemplo.txt";
    const char *archivoLocal = "ejemplo.txt";
 
    if (FtpGetFile(hFtpSession, archivoRemoto, archivoLocal, FALSE, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0)) {
        printf("Archivo descargado: %s\n", archivoLocal);
    } else {
        printf("Error al descargar el archivo\n");
    }
 
    // Cerrar handles
    InternetCloseHandle(hFtpSession);
    InternetCloseHandle(hInternet);
 
    return 0;
}

---

Cosas a tener en cuenta:


- Cambia `"ftp.tuservidor.com"`, `"usuario"` y `"contraseña"` por los datos reales.
- La función `FtpGetFile()` descarga un archivo del servidor FTP.
- Puedes usar `FtpFindFirstFile()` y `FtpFindNextFile()` para listar archivos en el directorio.

---

Alternativa: librerías externas


Si quieres algo más portable o multiplataforma, puedes usar librerías como libcurl, que soporta FTP y es muy potente y flexible.

Ejemplo con libcurl para descargar un archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <curl/curl.h>
#include <stdio.h>
 
int main() {
    CURL *curl;
    CURLcode res;
    FILE *fp = fopen("ejemplo.txt", "wb");
    if (!fp) {
        printf("No se pudo abrir el archivo\n");
        return 1;
    }
 
    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.tuservidor.com/ejercicios/ejemplo.txt");
        curl_easy_setopt(curl, CURLOPT_USERPWD, "usuario:contraseña");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
            printf("Error: %s\n", curl_easy_strerror(res));
        curl_easy_cleanup(curl);
    }
    fclose(fp);
    curl_global_cleanup();
    return 0;
}

Para usar libcurl, necesitas descargarla y enlazarla en tu proyecto.

---

Resumen


- Para un programa simple en Windows, usa `wininet` y `FtpGetFile()`.
- Para mayor portabilidad, usa libcurl.
- La idea es conectarte, listar archivos si quieres, y descargar los que necesites.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar