En me basant sur un super exemple du forum et avec l'aide de certains d'entre vous, j'arrive maintenant à uploader et downloader des fichiers via FTP jusque là plus de souci!
J'aimerai faire un test sur un repertoire distant pour savoir s'il y a des fichiers à downloader ou pas. Alors j'ai eu la bonne idée de d'utiliser la commande NLST ...
La connexion se fait bien, voici l'affichage sur le serial :
List -----------------------
<--- 227 Entering Passive Mode (82,165,109,152,218,254).
<--- 150 Opening ASCII mode data connection for file list
le pb, c'est qu'après, je ne sais pas comment récupérer les noms des fichiers
Une bonne âme pour m'aider svp?
byte FTPlist(String repFTPoutput)
{
Serial.println(F("List -----------------------"));
EthernetClient dclient; // Open socket
client.println(F("PASV"));
if(!eRcv()) return 0;
char *tStr = strtok(outBuf,"(,");
int array_pasv[6];
for ( int i = 0; i < 6; ++i) {
tStr = strtok(NULL,"(,");
array_pasv[i] = atoi(tStr);
if(tStr == NULL)
{
Serial.println(F("Bad PASV Answer"));
}
}
unsigned int hiPort,loPort;
hiPort = array_pasv[4] << 8;
loPort = array_pasv[5] & 255;
hiPort = hiPort | loPort; // FTP port
if (!dclient.connect(IPhostFTP,hiPort)) { // test FTP connexion
Serial.println(F("Data connection failed"));
client.stop();
fh.close();
return 0;
}
client.print(F("NLST "));
client.println(repFTPoutput);
// liste des fichiers
?????
// fin -----------
dclient.stop(); // Close socket
return 1;
Serial.println(F("end list"));
}
Es-tu sur que ton serveur FTP supporte cette option "-a" ? Cette option n'a pas l'air d'être universellement supportée.
Tu pointe vers la doc du serveur TitanFTP. Est-ce bien celui-ci que tu utilises ?
Es-tu sur que ton serveur FTP supporte cette option "-a" ? Cette option n'a pas l'air d'être universellement supportée.
Tu pointe vers la doc du serveur TitanFTP. Est-ce bien celui-ci que tu utilises ?
Effectivement, mais je pensais que c'était du standard ...
Je suis chez 1&1, je regarde ce que c'est ...
Merci à toi, néanmoins saurais-tu l'argument que je puisse passer pour ne pas lister le '.' et '..' stp?
Voir même supprimer le path et avoir juste la liste des fichiers.
En fait, je cherche un fichier spécific, si je peux passer le nom de fichier en argument et que ça me retourne TRUE ou FALSE, je serai une homme heureux
D'après la RFC, NLST ou LIST ne prennent pas d'argument autre que le répertoire.
C'est à toi de parser le retour.
N'oublie pas que ce type de protocole a été conçu à l'origine pour tourner sur des stations de travail, pas sur des micro 8-bit avec seulement 2KO de RAM.....
barbudor:
D'après la RFC, NLST ou LIST ne prennent pas d'argument autre que le répertoire.
C'est à toi de parser le retour.
N'oublie pas que ce type de protocole a été conçu à l'origine pour tourner sur des stations de travail, pas sur des micro 8-bit avec seulement 2KO de RAM.....
Question bête : es-tu vraiment obligé de faire du FTP?
Est-ce que ca ne serait pas plus simple de faire du HTTP qui cause avec des scripts PHP sur lesquels tu déportes la conpléxité de la gestion du FTP?
Le FTP est un protocole très simple (beaucoup plus que le http) et permet justement d'éviter de mettre des serveurs http avec du php etc.
Pour voir si le fichier existe, tu peux utiliser la commande ´SIZE nom-du-fichier' qui devrait renvoyer une erreur si le fichier n'existe pas et sa taille s'il existe.
cbrandt:
Le FTP est un protocole très simple (beaucoup plus que le http) et permet justement d'éviter de mettre des serveurs http avec du php etc.
Pour voir si le fichier existe, tu peux utiliser la commande ´SIZE nom-du-fichier' qui devrait renvoyer une erreur si le fichier n'existe pas et sa taille s'il existe.
Comme le dit Barbudor, la rfc est ton amie
Eh wé pas con, je vais tester !!!!
Justement là je fait un proto de controleur aqua via ftp et je comptais faire une version http/json dans un 2d temps.
Ce qui me fait envisager de passer via http c'est que je me dis que le port 21 n'est peut-être pas tjrs ouvert par défaut selon les box réseau ou archi des futurs clients. Tu en penses quoi?
Je trouve qu'avec FTP ca fonctionne tres bien et me dis qu'a terme au lieu de tout refaire, je pourrais peut-être faire du FTP over http. Tu en penses quoi également?
Les box des opérateurs sont toujours ouvertes en sortie, mais en entrée il faut généralement rediriger les ou les ports désirés vers un ordinateur du réseau local.
Ce qui ne devrait pas changer grand'chose entre http et FTP (sous réserve d'utiliser le FTP en mode passif, ce qui est le cas dans ton programme).
FTP over http ne sérail utile que si tu as absolument besoin du FTP et que ton seul point d'entrée ou de sortie de ton réseau serait le http (cas d'une entreprise par exemple où tu ne maîtrise pas ces réglages). Mais ça doit nécessiter un ordinateur intermédiaire qui décapsule le FTP du http et qui renvoie ensuite les requêtes FTP vers le serveur final. Plutôt lourd.
Le ftp est bien si tu veux uploader et/ou downloader des fichiers, mais On peut aussi le faire en http. Si tu veux de l'interactivité alors http avec Json est un bon choix - ça permettrait de faire un site web hébergé sur l'arduino et le browser irait communiquer en Json pour changer l'état d'un pin ou n'importe quoi d'autre.
En fait pour mieux architecturer ton projet, tu devrais voir qui sert des informations (l'arduino ou un autre ordinateur) et qui en a besoin (et pour quoi faire: juste uploader des fichiers de conf ? Interagir avec l'arduino ?). De là viendra le choix du protocle et d'implementer sur l'arduino le côté client ou le côté serveur.
cbrandt:
Les box des opérateurs sont toujours ouvertes en sortie, mais en entrée il faut généralement rediriger les ou les ports désirés vers un ordinateur du réseau local.
Ce qui ne devrait pas changer grand'chose entre http et FTP (sous réserve d'utiliser le FTP en mode passif, ce qui est le cas dans ton programme).
FTP over http ne sérail utile que si tu as absolument besoin du FTP et que ton seul point d'entrée ou de sortie de ton réseau serait le http (cas d'une entreprise par exemple où tu ne maîtrise pas ces réglages). Mais ça doit nécessiter un ordinateur intermédiaire qui décapsule le FTP du http et qui renvoie ensuite les requêtes FTP vers le serveur final. Plutôt lourd.
Le ftp est bien si tu veux uploader et/ou downloader des fichiers, mais On peut aussi le faire en http. Si tu veux de l'interactivité alors http avec Json est un bon choix - ça permettrait de faire un site web hébergé sur l'arduino et le browser irait communiquer en Json pour changer l'état d'un pin ou n'importe quoi d'autre.
En fait pour mieux architecturer ton projet, tu devrais voir qui sert des informations (l'arduino ou un autre ordinateur) et qui en a besoin (et pour quoi faire: juste uploader des fichiers de conf ? Interagir avec l'arduino ?). De là viendra le choix du protocle et d'implementer sur l'arduino le côté client ou le côté serveur.