C/Visual C - envio de archivo

 
Vista:

envio de archivo

Publicado por cris (1 intervención) el 15/11/2002 07:52:00
Quiero enviar un archivo utilizando c, debo utilizar el protocolo http (o algun otro), alguien puede ayudarme?
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

Envío de archivos usando el protocolo HTTP en C

Publicado por Alejandro (913 intervenciones) el 02/04/2025 21:40:05
Cris, para enviar un archivo utilizando el protocolo HTTP en C, puedes usar sockets para establecer una conexión con un servidor y enviar el archivo como parte de una solicitud POST. A continuación, te muestro un ejemplo básico de cómo hacerlo:

Ejemplo de código en C



Este código establece una conexión TCP con un servidor y envía un archivo utilizando el método POST. Asegúrate de reemplazar `hostname`, `port`, y `filepath` con los valores correspondientes.

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
 
#define BUFFER_SIZE 1024
 
void sendFile(const char *hostname, int port, const char *filepath) {
    int sock;
    struct sockaddr_in server_addr;
    FILE *file;
    char buffer[BUFFER_SIZE];
    char *file_data;
    long file_size;
 
    // Abrir el archivo
    file = fopen(filepath, "rb");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return;
    }
 
    // Obtener el tamaño del archivo
    fseek(file, 0, SEEK_END);
    file_size = ftell(file);
    fseek(file, 0, SEEK_SET);
 
    // Crear el socket
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) {
        perror("Error al crear el socket");
        fclose(file);
        return;
    }
 
    // Configurar la dirección del servidor
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port);
    inet_pton(AF_INET, hostname, &server_addr.sin_addr);
 
    // Conectar al servidor
    if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("Error al conectar al servidor");
        close(sock);
        fclose(file);
        return;
    }
 
    // Preparar la solicitud HTTP POST
    snprintf(buffer, sizeof(buffer),
             "POST /upload HTTP/1.1\r\n"
            "Host: %s\r\n"
             "Content-Type: application/octet-stream\r\n"
             "Content-Length: %ld\r\n"
             "Connection: close\r\n"
             "\r\n", hostname, file_size);
 
    // Enviar la solicitud
    send(sock, buffer, strlen(buffer), 0);
 
    // Leer el archivo y enviarlo
    file_data = (char *)malloc(file_size);
    fread(file_data, 1, file_size, file);
    send(sock, file_data, file_size, 0);
 
    // Limpiar
    free(file_data);
    fclose(file);
    close(sock);
    printf("Archivo enviado con éxito.\n");
}
 
int main() {
    const char *hostname = "127.0.0.1"; // Cambia esto por la dirección del servidor
    int port = 8080; // Cambia esto por el puerto del servidor
    const char *filepath = "ruta/al/archivo.txt"; // Cambia esto por la ruta del archivo
 
    sendFile(hostname, port, filepath);
    return 0;
}

Notas importantes:


1. Servidor: Asegúrate de que el servidor al que estás enviando el archivo esté configurado para recibir archivos a través de HTTP POST. El ejemplo asume que el endpoint es `/upload`.
2. Compilación: Este código debe ser compilado en un entorno que soporte sockets, como Linux. En Windows, necesitarás incluir las bibliotecas de Winsock.
3. Manejo de errores: Este código tiene un manejo básico de errores. En un entorno de producción, deberías implementar un manejo de errores más robusto.

Este ejemplo te proporciona una base para enviar archivos utilizando HTTP en C.
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