C/Visual C - Como enviar ejecutables por sockets en UNIX???

 
Vista:

Como enviar ejecutables por sockets en UNIX???

Publicado por Tok (13 intervenciones) el 19/07/2002 12:29:25
Buenas, necesito saber como se envian ejecutables a traves de sockets de tal forma que al "reensamblarlos" en el destino, sigan siendo ejecutables, es decir, que no de errores al intentar ejecutarlos. Con lectura binaria de los ejecutables no funciona. Muchas gracias.
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 ejecutables a través de sockets

Publicado por Alejandro (913 intervenciones) el 11/03/2025 18:35:29
Para enviar archivos ejecutables a través de sockets en C/Visual C, es fundamental asegurarse de que el archivo se lea y se envíe en modo binario. Aquí te dejo un enfoque básico que puedes seguir:

1. Configuración del socket:
Asegúrate de tener un socket configurado correctamente tanto en el cliente como en el servidor.

2. Lectura y envío del archivo:
Utiliza funciones de lectura y escritura en modo binario. Aquí tienes un ejemplo básico de cómo hacerlo:

Código del cliente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
 
void sendFile(SOCKET sock, const char *filename) {
    FILE *file = fopen(filename, "rb");
    if (file == NULL) {
        perror("No se puede abrir el archivo");
        return;
    }
 
    char buffer[1024];
    size_t bytesRead;
    while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0) {
        send(sock, buffer, bytesRead, 0);
    }
 
    fclose(file);
}

Código del servidor:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
 
void receiveFile(SOCKET sock, const char *filename) {
    FILE *file = fopen(filename, "wb");
    if (file == NULL) {
        perror("No se puede crear el archivo");
        return;
    }
 
    char buffer[1024];
    int bytesReceived;
    while ((bytesReceived = recv(sock, buffer, sizeof(buffer), 0)) > 0) {
        fwrite(buffer, 1, bytesReceived, file);
    }
 
    fclose(file);
}

3. Consideraciones adicionales:
- Asegúrate de que el archivo se envíe completamente antes de cerrar el socket.
- Maneja adecuadamente los errores de conexión y de archivo.
- Considera implementar un mecanismo para verificar la integridad del archivo después de la transferencia, como un hash.

4. Pruebas:
Después de implementar el código, prueba enviar un archivo ejecutable y verifica que se pueda ejecutar sin errores en el destino.

Este enfoque debería permitirte enviar ejecutables a través de sockets sin que se corrompan. Si encuentras problemas, revisa los permisos de archivo y asegúrate de que no haya interferencias en la red.
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