Aplicación de transferencia de archivos en C (TCP)
Una simple aplicación de transferencia de archivos construida con C usando los enchufes TCP. Esta aplicación incluye un servidor que escucha las conexiones de cliente entrantes y sirve archivos, y un cliente que solicita un archivo desde el servidor y lo guarda localmente.
Requisitos
Para ejecutar esta aplicación, necesitará:
- Compilador MINGW o GCC (para compilar el código C en Windows).
- Código de Visual Studio (opcional, para editar y administrar el código).
- Git (opcional, para clonar este repositorio y control de versiones).
Descargas
Descargar Mingw :
- Vaya a la página SourceForge de Mingw.
- Instale MingW y asegúrese de que
gcc esté incluido en la instalación. - Agregue la carpeta
bin de Mingw (p. Ej., C:MinGWbin ) a su variable de entorno de ruta .
Instale el código Visual Studio (opcional):
- Descargue e instale desde el sitio web de Visual Studio Code.
- Puede abrir la carpeta del proyecto en el código VS para administrar y compilar fácilmente archivos.
GTK 3 (para la interfaz gráfica de usuario).
Verificar la instalación de GCC
Para asegurarse de que GCC se instale correctamente, abra un terminal o símbolo del sistema y escriba:
Debería ver la información de la versión si GCC se instala correctamente.
Descargas
- Descargar Mingw :
- Vaya a la página SourceForge de Mingw.
- Instale MingW y asegúrese de que GCC esté incluido en la instalación.
- Agregue la carpeta bin de Mingw (p. Ej., C: mingw bin) a su variable de entorno de ruta.
- Instalar GTK 3 :
- Descargue GTK 3 para Windows desde el sitio web oficial de GTK.
- Instale GTK y asegúrese de que las DLL requeridas se coloquen en la ruta de su sistema o junto con los ejecutables compilados. Alternativamente, si está usando MSYS2:
- Abra el terminal MSYS2 y ejecute:
pacman -S mingw-w64-x86_64-gtk3
Empezando
- Clon este repositorio
- Abra el proyecto en su IDE o editor de texto preferido
- Puede usar Visual Studio Code, Code :: Blocks, Dev-C ++, Clion o cualquier otro editor de texto IDE que admita la programación C.
- Abra la carpeta del proyecto en su editor elegido para administrar y editar archivos fácilmente.
Compilación - Sin GTK
Compile las aplicaciones del servidor y el cliente de la siguiente manera:
- Compilar el servidor
gcc server.c -o server.exe -lws2_32
- Compilar el cliente
gcc client.c -o client.exe -lws2_32
Esto producirá server.exe y client.exe.
Ejecutando la aplicación - sin GTK
Paso 1: Inicie el servidor
- Abra una terminal o símbolo del sistema en el directorio del proyecto.
- Ejecute la aplicación del servidor:
Paso 2: ejecute el cliente
- En un terminal separado o en una máquina diferente , navegue al directorio del proyecto.
- Ejecute el cliente, especificando la dirección IP del servidor y el nombre de archivo que desea descargar:
./client.exe < server_ip > < filename >
- Reemplace <vero_ip> con la dirección IP del servidor (por ejemplo, 127.0.0.1 si se ejecuta localmente).
- Reemplace con el nombre del archivo que desea descargar desde el directorio del servidor.
./client.exe 127.0.0.1 testfile.txt
El cliente se conectará al servidor, solicitará el archivo especificado y lo guardará localmente con el mismo nombre de archivo.
Compilar servidor y cliente - con GTK
- Configure PKG-Config para encontrar GTK:
- Si está utilizando MSYS2 u otro Administrador de paquetes como VCPKG, asegúrese de que la ruta PKG-Config esté configurada correctamente. En MSYS2, puede ejecutar el siguiente comando:
export PKG_CONFIG_PATH= " /mingw64/lib/pkgconfig "
- Actualizar C_CPP_Properties.json en el código de Visual Studio: para garantizar que el código de Visual Studio reconozca GTK y otras bibliotecas, actualice el archivo c_cpp_properties.json para incluir la ruta a GTK y otras bibliotecas necesarias: Ejemplo:: Ejemplo:
- Presione CTRL + Shift + P y busque C/C ++: Editar configuraciones (UI).
- En la sección de ruta de inclusión, agregue rutas como:
" C:/msys64/mingw64/include/gtk-3.0 " ,
" C:/msys64/mingw64/include/glib-2.0 " ,
" C:/msys64/mingw64/lib/glib-2.0/include " ,
" C:/msys64/mingw64/include/pango-1.0 " ,
" C:/msys64/mingw64/include/cairo " ,
" C:/msys64/mingw64/include/gdk-pixbuf-2.0 " ,
" C:/msys64/mingw64/include/atk-1.0 " ,
" C:/msys64/mingw64/include/harfbuzz "
- Compilar el servidor y el cliente:
- Compilar la aplicación del servidor:
gcc server_app.c -o server_app.exe ` pkg-config --cflags --libs gtk+-3.0 ` -lws2_32
- Compilar la aplicación del cliente:
gcc client_app.c -o client_app.exe ` pkg-config --cflags --libs gtk+-3.0 ` -lws2_32
Esto producirá server_app.exe y client_app.exe en la carpeta de su proyecto.
Ejecutando la aplicación - con GTK
Paso 1: Inicie el servidor
- Abra una terminal o símbolo del sistema en el directorio del proyecto.
- Ejecute la aplicación del servidor:
Paso 2: ejecute el cliente
- En un terminal separado o en una máquina diferente, navegue al directorio del proyecto.
- Ejecute el cliente, especificando la dirección IP del servidor y el nombre de archivo que desea descargar:
Solución de problemas
- Conexión rechazada (10061) : asegúrese de que el servidor se esté ejecutando y escuche en la IP y el puerto especificados.
- IP y puerto inválidos : verifique que tanto el cliente como el servidor estén utilizando la IP y el puerto correctos.
- Firewall o antivirus : deshabilite temporalmente el firewall o el software Anitivirus si bloquean las conexiones.
Notas
- Asegúrese de que el servidor y el cliente estén en la misma red, o ajuste la configuración del enrutador y el firewall para permitir la comunicación.
- Esta aplicación está diseñada para transferencias básicas de archivos y actualmente admite conexiones de un solo cliente.
Mejoras futuras - rastreador
- Transferencias de múltiples archivos:
- Admite transferir múltiples archivos a la vez o en un lote. Esto podría implicar enviar una matriz de nombres de archivo y luego transferir cada archivo uno tras otro.
- Transferencias de directorio:
- Permita la transferencia de directorios completos, lo que podría implicar el envío recursivamente de todos los archivos y carpetas, junto con metadatos.
- Compresión:
- Para reducir el tiempo de transferencia, puede comprimir los archivos antes de enviarlos y descomprimirlos en el lado receptor.
- Cifrado:
- Implemente el cifrado (como SSL/TLS) para transferencias de archivos seguros, especialmente si planea enviar datos confidenciales.
- Interfaz de usuario ✔
- Para la aplicación con GTK ✔
- para la aplicación sin GTK ✔
- Manejo de errores y otros problemas: ✔
- Sobrescripción de archivos, tipos de archivos especiales, verificación de integridad de archivos. ✔
Si desea contribuir, incluso si usa CHAT-GPT, sepa lo que está haciendo primero porque está perdiendo mi tiempo (al permanecer y revisar su código incompleto) y el suyo (pidiéndole a GPT que escriba el código y no reciba el PR). Es tan obvio cuando el solicitante está usando AI y ni siquiera está pensando en el problema.
Licencia
Este proyecto es de código abierto y está disponible bajo la licencia MIT.