Application de transfert de fichiers en C (TCP)
Une application de transfert de fichiers simple construite avec C à l'aide de sockets TCP. Cette application comprend un serveur qui écoute les connexions clients entrantes et sert des fichiers, et un client qui demande un fichier à partir du serveur et l'enregistre localement.
Exigences
Pour exécuter cette application, vous aurez besoin:
- Compilateur Mingw ou GCC (pour compiler le code C sur Windows).
- Code Visual Studio (facultatif, pour modifier et gérer le code).
- Git (facultatif, pour cloner ce référentiel et le contrôle de version).
Téléchargements
Télécharger Mingw :
- Accédez à la page Sourceforge de Mingw.
- Installez MINGW et assurez-vous que
gcc est inclus dans l'installation. - Ajoutez le dossier
bin de Mingw (par exemple, C:MinGWbin ) à votre variable d'environnement de chemin .
Installer Visual Studio Code (facultatif):
- Téléchargez et installez à partir du site Web de Visual Studio Code.
- Vous pouvez ouvrir le dossier du projet dans VS Code pour gérer et compiler facilement les fichiers.
GTK 3 (pour l'interface utilisateur graphique).
Vérifier l'installation de GCC
Pour vous assurer que GCC est installé correctement, ouvrez un terminal ou une invite de commande et type:
Vous devriez voir des informations de version si GCC est correctement installé.
Téléchargements
- Télécharger Mingw :
- Accédez à la page Sourceforge de Mingw.
- Installez MINGW et assurez-vous que GCC est inclus dans l'installation.
- Ajoutez le dossier bin de Mingw (par exemple, C: Mingw bin) à votre variable d'environnement de chemin.
- Installez GTK 3 :
- Téléchargez GTK 3 pour Windows sur le site officiel de GTK.
- Installez GTK et assurez-vous que les DLL requises sont placées dans le chemin de votre système ou le long des exécutables compilés. Alternativement, si vous utilisez MSYS2:
- Ouvrez le terminal MSYS2 et exécutez:
pacman -S mingw-w64-x86_64-gtk3
Commencer
- Cloner ce référentiel
- Ouvrez le projet dans votre éditeur IDE ou Texte préféré
- Vous pouvez utiliser Visual Studio Code, Code :: Blocks, Dev-C ++, Clion ou tout autre éditeur de texte IDE qui prend en charge la programmation C.
- Ouvrez le dossier du projet dans votre éditeur choisi pour gérer et modifier facilement les fichiers.
Compilation - sans GTK
Compilez les applications du serveur et du client comme suit:
- Compiler le serveur
gcc server.c -o server.exe -lws2_32
- Compiler le client
gcc client.c -o client.exe -lws2_32
Cela produira server.exe et client.exe.
Exécution de l'application - sans GTK
Étape 1: Démarrez le serveur
- Ouvrez un terminal ou une invite de commande dans le répertoire du projet.
- Exécutez l'application du serveur:
Étape 2: Exécutez le client
- Dans un terminal séparé ou sur une autre machine , accédez au répertoire du projet.
- Exécutez le client, en spécifiant l'adresse IP du serveur et le nom de fichier que vous souhaitez télécharger:
./client.exe < server_ip > < filename >
- Remplacez <ferver_ip> par l'adresse IP du serveur (par exemple, 127.0.0.1 si l'exécution locale).
- Remplacez par le nom du fichier que vous souhaitez télécharger à partir du répertoire du serveur.
./client.exe 127.0.0.1 testfile.txt
Le client se connectera au serveur, demandera le fichier spécifié et l'enregistrera localement avec le même nom de fichier.
Compiler le serveur et le client - avec GTK
- Configurez PKG-Config pour trouver GTK:
- Si vous utilisez MSYS2 ou un autre gestionnaire de packages comme VCPKG, assurez-vous que le chemin PKG-Config est configuré correctement. Dans MSYS2, vous pouvez exécuter la commande suivante:
export PKG_CONFIG_PATH= " /mingw64/lib/pkgconfig "
- Mettre à jour C_CPP_Properties.json dans Visual Studio Code: Pour vous assurer que le code Visual Studio reconnaît GTK et d'autres bibliothèques, mettez à jour le fichier C_CPP_Properties.json pour inclure le chemin d'accès à GTK et d'autres bibliothèques nécessaires: Exemple:
- Appuyez sur Ctrl + Shift + P et recherchez C / C ++: Modifier les configurations (UI).
- Dans la section Inclure le chemin, ajoutez des chemins comme:
" 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 "
- Compilez le serveur et le client:
- Compilez l'application du serveur:
gcc server_app.c -o server_app.exe ` pkg-config --cflags --libs gtk+-3.0 ` -lws2_32
- Compiler l'application client:
gcc client_app.c -o client_app.exe ` pkg-config --cflags --libs gtk+-3.0 ` -lws2_32
Cela produira server_app.exe et client_app.exe dans votre dossier de projet.
Exécution de l'application - avec GTK
Étape 1: Démarrez le serveur
- Ouvrez un terminal ou une invite de commande dans le répertoire du projet.
- Exécutez l'application du serveur:
Étape 2: Exécutez le client
- Dans un terminal séparé ou sur une autre machine, accédez au répertoire du projet.
- Exécutez le client, en spécifiant l'adresse IP du serveur et le nom de fichier que vous souhaitez télécharger:
Dépannage
- Connexion refusée (10061) : assurez-vous que le serveur s'exécute et écoute sur l'IP et le port spécifié.
- IP et port non valides : Vérifiez que le client et le serveur utilisent l'IP et le port corrects.
- Pare-feu ou antivirus : désactiver temporairement le pare-feu ou le logiciel d'anitivirus s'ils bloquent les connexions.
Notes
- Assurez-vous que le serveur et le client sont sur le même réseau ou ajustez les paramètres du routeur et du pare-feu pour permettre la communication.
- Cette application est conçue pour les transferts de fichiers de base et prend actuellement en charge les connexions monomolientes.
Améliorations futures - Tracker
- Transferts de fichiers multiples:
- Prise en charge du transfert de plusieurs fichiers à la fois ou dans un lot. Cela pourrait impliquer l'envoi d'un tableau de noms de fichiers, puis transférer chaque fichier les uns après l'autre.
- Transferts d'annuaire:
- Autoriser le transfert de répertoires entiers, ce qui pourrait impliquer l'envoi de tous les fichiers et dossiers, ainsi que les métadonnées.
- Compression:
- Pour réduire le temps de transfert, vous pouvez compresser les fichiers avant de les envoyer et de les décompresser du côté récepteur.
- Cryptage:
- Implémentez le cryptage (comme SSL / TLS) pour les transferts de fichiers sécurisés, surtout si vous prévoyez d'envoyer des données sensibles.
- Interface utilisateur ✔
- pour l'application avec gtk ✔
- pour la demande sans gtk ✔
- Gestion des erreurs et autres problèmes: ✔
- Évasion de fichiers, types de fichiers spéciaux, vérification de l'intégrité des fichiers. ✔
Si vous souhaitez contribuer, même si vous utilisez Chat-GPT, sachez ce que vous faites en premier parce que vous perdez à la fois mon temps (en restant et en examinant votre code inachevé de buggy) et le vôtre (en demandant à GPT d'écrire le code et de ne pas obtenir le PR). Il est si évident que le demandeur utilise l'IA et ne pense même pas au problème.
Licence
Ce projet est open-source et disponible sous la licence MIT.