Préambule
------------------------------------------
Bonjour à tous,
cela faisait longtemps que je n'avais pas ajouté de code sur le site, alors j'ai cherché parmi mes récents développements ce qui pouvait vraiment servir, et j'ai conclu qu'en posant ce serveur FTP, cela ravirait certains, que ce soit en terme de fonctionnalité ou en terme d'apprentissage winsock (pour parfaire les connaissances acquises via le tutorial).
Le SERVEUR FTP
------------------------------------------
Ainsi, cette source est un serveur FTP, il est selon mes rares tests pleinement fonctionnel, il autorise toutes les opérations courantes (sur les dossiers, fichiers, le download, l'upload, le mode passif et le mode actif). Il gère également les utilisateurs, avec bien entendu pseudo, mot de passe propre à chacun, mais aussi le dossier racine paramétrable pour chacun.
Sachez toutefois que vous ne trouverez dans cette source que le strict nécessaire d'un serveur FTP, considérons donc cela comme un MOTEUR de SERVEUR FTP.
A titre d'exemple pour illustrer cette qualification, les utilisateurs sont définis dans un fichier externe, qui possède sa propre structure, à éditer par exemple via notepad, mais il n'y a pas l'interface pour les saisir les modifier etc... Comprenez par là que ce n'est pas le but de cette source de proposer un SERVEUR FTP complet "ready to sell" : c'est le moteur, autour duquel vous pouvez (devez / devrez) construire VOTRE application, quelle qu'elle soit.
Fonctionnement
------------------------------------------
L'archive fournie avec cette source comprend un exemple d'utilisation du moteur minimaliste "ready to run". Téléchargez, exécutez, puis ouvrez votre client FTP favori : vous pourrez ainsi via l'adresse localhost, le pseudo "pseudo" et le mot de passe "password" explorer votre C:\ via FTP.
Voici les données utilisateur par défaut, actuellement présentent dans le fichier de config "default.txt" :
(login ; password ; dossier racine)
pseudo; password; c:\
utilisateur1; pass1; c:\Documents and Settings\
utilisateur2; pass2; c:\windows\
La structure
------------------------------------------
Le moteur est objet, me semble propre et "fully optimized", bien que créé je l'avoue rapidement, en une nuit et quelques heures de peaufinage, FROM SCRATCH.
Voici sa structure :
>> une Form FTPserver : elle est le noyau du moteur, et héberge les contrôles Winsock. J'ai préféré utiliser les contrôles Winsock, et donc je me suis contraint d'utiliser cette Form, simplement parcequ'ils demeurent à ma connaissance les plus stables face aux solutions "Winsock-less" basées sur les API. La Form peut tout à fait rester invisible, tout comme contenir une interface, cela n'a pas d'importance : elle ne fait qu'héberger.
Elle a 3 procédures majeures :
- LoadParameters(Optional FromFile As String = ""), qui charge les utilisateurs depuis un fichier fourni, sinon depuis un fichier nommé "default.txt"
- StartServer(Optional ByVal Port As Long = 21), dont la fonction est évidente
- CloseServer(), qui se passe aussi de commentaire
>> une Class ClassUser, qui n'a pour seule fonction que d'être un objet contenant un utilisateur chargé dans le moteur. Le noyau possède une collection de cette Class.
>> une Class ClassClient, qui représente un client actuellement connecté au serveur FTP. Le noyau possède une collection de cette Class. Nota : c'est la ClassClient qui s'autogère. Le développement est donc bien POO puisque chaque client se gère seul, et non pas le noyau qui va patronner tout l'ensemble. La gestion du code s'en trouve simplifiée, clarifiée, et le tout est stable (pas de bouchons dans les traitements de plusieurs acteurs par une même procédure "master", chaque individu se gère)
Les fichiers des utilisateurs
------------------------------------------
Le moteur doit se voir renseigner les utilisateurs qu'il peut accepter, ainsi que le dossier racine du partage FTP de chacun d'entre eux.
Pour se faire, vous devez appeler la procédure évoquée plus haut, LoadParameters, en lui indiquant en paramètre le fichier à charger. La structure de ce fichier est :
pseudo; password; chemin_racine_absolu\
pseudo; password; chemin_racine_absolu\
pseudo; password; chemin_racine_absolu\
etc... autant que nécessaire par utilisateur.
Un utilisateur donné ne peut figurer qu'une seule fois.
Vous pouvez regarder le fichier default.txt fourni dans l'archive. Sachez également que la procédure appelée SANS argument cherchera à charger le fichier nommé "default.txt".