Petite prise de tete avec realisation serveur ftp

Signaler
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
-
Messages postés
547
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
7 octobre 2007
-
salut a tous,
voila je suis en train de realiser un petit serveur ftp et jusque la ca va pas trop mal.
j'ai créé 2 threads, l'un pour le canal de control sur le port 21 et l'autre pour le canal de données sur le port 20 ou sur le port 1030 en fonction du mode PORT ou PASV.
pour ceux qui connaissent un peu la rfc, mon pb est liée a la reponse a la commande LIST qui demande de lister le contenu du repertoire courant.
le serveur est censé renvoyé sur le canal de données la description des différents fichiers contenus dans le repertoire courant (nom fichiers, taille, date creation etc etc) mais le probleme c'est que je n'ai vu nul part la facon dont il faut les envoyer! est ce qu'il faut faire des trucs du genre pour chaque fichier:
file: nom_fichier\n
size: taille_fichier\n
etc etc
la rfc n'est pas tres claire la dessus!! et les exemples sur google ne foisonnent pas.
je sais que c'est pas un pb lié au C++ mais je sais pas ou demander . En plus je le fais en C++ et je compte le soumettre une fois terminé demain ou apres demain pour vos critiques.
PLIZ HELP.

6 réponses

Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
petite precision:
avec la commande NLST ca marche sans pb car on envoie juste les nom des fichiers du repertoire séparé par un <CRLF>
\n en c++ sans autres informations.
Messages postés
547
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
7 octobre 2007
1
Justement, la rfc est assez claire, le serveur renvoie les données avec
le format qu'il veut du moment que c'est compréhensible par un humain.

Mais souvent (du moins sous Unix) les données arrivent dans ce genre là :

drwxr-xr-x 1 ftp ftp 0 Sep 05 19:27 bin

-r--r--r-- 1 guilhem lavaux 12738 Jan 16 20:17 cmndata.cpp

J'ai même vu des serveurs sous Windows renvoyer ce même format. On peut
prévoir avec plus ou moins de chance le format de ces données en
examinant la réponse à la commande SYST. De mémoire un serveur
utilisant un format différent renvoi une chaine contenant Windows_NT (à
vérifier) en réponse à la commande SYST, mais je ne connais pas le nom
de ce serveur (mais j'ai déjà rencontrer ce cas sur un client).


Cordialement

Fred Cailleau-Lepetit (http://cfred.free.fr)
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
merci fred de la precision.
juste une chose: en effet j'ai vu que meme les serveurs ftp avaient pour mauvaise habitude de repondre UNIX a la commande SYST. etant donné que je vais pas recréer la roue, moi aussi j'ai mis unix.
par contre si tu pouvais m'indiquer sur la rfc la partie qui traite de la reponse a la commande LIST ca m'aiderait beaucoup.
Messages postés
547
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
7 octobre 2007
1
A votre service ;-)



Extrait RFC 959 (traduction française)



4.1.3. COMMANDES DE SERVICE FTP

...

LIST (LIST) CATALOGUE DU REPERTOIRE COURANT

Cette commande provoque l'émission par le serveur d'une liste de
fichiers au DTP passif. Si le chemin mentionné spécifie un répertoire
ou tout autre groupe de fichiers, le serveur répondra par une liste des
fichiers dans ce répertoire ou ce groupe. Si le chemin spécifie un
fichier normal, alors les informations système relatives à ce fichier
seront renvoyées. Une absence d'argument indique par défaut le
répertoire courant. La réponse est transférée via le canal de données
pour les types ASCII ou EBCDIC. (l'utilisateur doit s'assurer que le
type est effectivement ASCII ou EBCDIC). Comme les informations
relatives à un fichier peuvent varier grandement en forme et
présentation entre divers systèmes, celles-ci seront généralement peu
exploitable par un automate. Elles sont cependant fort utiles pour un
utilisateur humain.


Cordialement

Fred Cailleau-Lepetit (http://cfred.free.fr)
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
je te remercie fred.
mais j'avais deja lu cet extrait
mais il n'est pas dit par exemple que la chaine reponse a envoyer sur le canal de données doit commencer par les droits, enuite le type de fichier, puis la date de creation, ensuite le nom de fichier etc etc
mais bon au moins j'ai deja une indication avec l'exemple que tu m'as donné plus haut.
je le teste d'abord et si ca marche, j'accepterai ta reponse et je te paierai un pot
je te tiendrais au courant ... merci
Messages postés
547
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
7 octobre 2007
1
Il n'est pas donné d'exemple car il est dit ceci "Comme les informations relatives à un fichier peuvent varier grandement
en forme et présentation entre divers systèmes, celles-ci seront
généralement peu exploitable par un automate. Elles sont cependant fort
utiles pour un utilisateur humain."


Je ferais juste un commentaire supplémentaire sur le format de date, je
l'ai toujours rencontré sous cet forme "Sep 05 19:27" avec toujours le
même nombre de caractère juste parfois pour certain fichier ou c'était
"Sep 05 2004" donc année à la place de l'heure mais toujours sur
5 caractères (il y a deux blanc après le numéro du jour). Voilà c'est
tout ce que j'ai trouvé dans mes recherches, j'espère que celà
t'aideras.


Cordialement

Fred Cailleau-Lepetit (http://cfred.free.fr)