PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Le FTP avec la famille de fonction NetXxx()
Le FTP avec la famille de fonction NetXxx()
Started by Mexance, Apr., 23 2017 4:12 AM - 8 replies
Registered member
28 messages
Popularité : +2 (2 votes)
Posted on April, 23 2017 - 4:12 AM
Bonjour à tous.
Je rencontre, depuis un bon bout de temps déjà, pas mal de problèmes au développement via WinDev d’une application de transfert d’images via le protocole FTP.
En effet je souhaite transférer des images d’un poste A vers un poste B, tous deux étant dans le même réseau local (PAS SUR INTERNET). Pour cela, grâce à l’aide en ligne https://doc.pcsoft.fr/?3056010, j’ai créé deux applications :
– Une application Client FTP pour le poste A (poste qui envoi les images)
– Une application Serveur FTP pour le poste B (poste qui reçoit les images)

Pour vous mettre dans le contexte, voici ce que j’ai fait sur chacun des postes :

– Poste B = Serveur FTP

//------------------------------------------------------------------------------------------------
gnConnectFTP est un entier // Déclaration de la variable de démarage du serveur FTP

// Création du fichier WDRPCSRV.INI contenant les droits de connexion de utilisateur AERH
SI fFichierExiste(fRepExe() + "\WDRPCSRV.INI") = Faux ALORS
INIEcrit("Passwords", "AERH", "123123000", fRepExe() + "\WDRPCSRV.INI")
SINON
fSupprime(fRepExe() + "\WDRPCSRV.INI")
INIEcrit("Passwords", "AERH", "123123000", fRepExe() + "\WDRPCSRV.INI")
FIN
gnConnectFTP = NetDémarreServeur(ServeurFTP, Faux, 2001) // Démarage du serveur FTP
//------------------------------------------------------------------------------------------------


- Poste A = Client FTP

//------------------------------------------------------------------------------------------------
sLaListeIci est une chaîne = fListeFichier(SysRep(srAppDataCommun) + "\PICS\*.*", frNonRécursif) // La liste des images sur le poste Client (Séparé par des RC)
POUR TOUT CHAÎNE sUneImage de sLaListeIci SEPAREE PAR RC // Pour chacune des photos trouvé dans le dossier spécifié plus haut
sIP est chaîne = "192.168.1.120" // On récuper l'adresse IP
SI Ping(sIP) = Vrai ALORS // Si la machine concerné répond au PING, c'est qu'elle est en ligne et connecté à notre réseau
nNumCnxFTP est entier = NetConnecte(sIP, ServeurFTP, "AERH", "123123000", Faux, INTRANET, 2001) // On se connecte à son server FTP
SI nNumCnxFTP = -1 OU nNumCnxFTP = 0 ALORS // Si la connexion au serveur FTP échoue, on affiche l'erreur
Erreur(ErreurInfo(errComplet))
FIN

SI nNumCnxFTP > 0 ALORS // Si parcontre la connexion au serveur FTP réusssi...
SI NetEnvoieFichier(nNumCnxFTP, sUneImage, "/ProgramData/PICS/" + ExtraitChaîne(sUneImage, 1, "\", DepuisFin), "Envoie en cours...", 100) = Faux ALORS
Erreur(ErreurInfo(errComplet))
FIN
FIN
NetDéconnecte(nNumCnxFTP) // On se déconnecte de ce serveur pour cette image là.
FIN
FIN
//------------------------------------------------------------------------------------------------


En gros, rien de bien compliqué. Mais voilà, ce code fonctionne 1 fois sur 100, et de façon aléatoire, je reçois des messages d’erreur pas assez explicatifs.
Dans mon dossier d'images, il n'y a pas de sous-dossiers, juste des images. J'ai bien ouverts tous les ports concernés dans mes pare-feux. Mais lorsque je lance le transfert, s'il y a plus de 2 images, le transfert échoue et me donne toutes les erreurs que j'ai posté en image plus bas.
Pourtant mon dossier contient plus de 600 images, et qui chacune pèse au maximum 700 Ko, donc pas lourde






















Et lorsque j'utilise la famille de fonction FTPXxx() à la place de NetXxx(), j’obtiens une erreur me disant "Impossible de se connecter au serveur FTP"
J'ai fais des recherches intensives sur le net, sans pour autant trouver de solutions. J'ai essayé de modifier le code, insérer des temporisation, etc, j'ai beau lire et relire l'aide, mais rien ne fonctionne.
Si quelqu’un a une solution pour moi, je suis très prenant, car à ce niveau et lui serai très reconnaissant, car je suis vraiment désespéré.
Merci déjà pour vos réponses.
Registered member
199 messages
Popularité : +14 (16 votes)
Posted on April, 23 2017 - 1:07 PM
Bonjour,

Pourquoi, vu que les postes sont sur le même réseau, ne pas simplement copier (via fcopie...) les fichiers dans un répertoire partagé ?

--
Bon développement

Pierre Devillers
Registered member
28 messages
Popularité : +2 (2 votes)
Posted on April, 23 2017 - 6:43 PM
J'ai également pensé à ça. Malheureusement le problème avec la fonction fCopieFichier, c'est qu'il faut justement qu'au préalable :
1/- Le répertoire de destination sur le poste serveur soit partagé
2/- L'utilisateur Windows sur le poste client ait les droits en Lecture/Ecriture sur le répertoire partagé du poste serveur

Or chez mon client je n'ai pas envie d'intervenir physiquement sur les postes pour modifier quoi que ce soit moi-même.
J'ai donc cherché sur longtemps sur internet comment faire ces deux choses (1/- et 2/-) par programmation, mais j'ai rien trouvé.
Registered member
190 messages
Popularité : +21 (23 votes)
Posted on April, 24 2017 - 8:30 AM
Bonjour

j'y connais pas grand chose en ftp mais il est possible qu'il y ait un délai de connexion entre 2 sessions pour des raisons de sécurité.

tu dis que ça coince lorsqu'il y a plusieurs images. Pourquoi faire une connexion / déconnexion pour chaque image?

Je ferais comme ceci:
1 - connexion
2 - transfert des images
3 - deconnexion
Registered member
1,923 messages
Popularité : +53 (65 votes)
Posted on April, 24 2017 - 9:13 AM
Bonjour,

Comme le dit Nicolas :
//------------------------------------------------------------------------------------------------
sIP est chaîne = "192.168.1.120" // On récupère l'adresse IP
SI Ping(sIP) = Vrai ALORS // Si la machine concerné répond au PING, c'est qu'elle est en ligne et connecté à notre réseau
nNumCnxFTP est entier = NetConnecte(sIP, ServeurFTP, "AERH", "123123000", Faux, INTRANET, 2001) // On se connecte à son server FTP
SI nNumCnxFTP = 0 ALORS // Si la connexion au serveur FTP échoue, on affiche l'erreur
Erreur(ErreurInfo(errComplet))
SINON
// La connexion au serveur FTP a réussi ...
sLaListeIci est une chaîne = fListeFichier(SysRep(srAppDataCommun) + "\PICS\*.*", frNonRécursif) // La liste des images sur le poste Client (Séparé par des RC)
POUR TOUT CHAÎNE sUneImage de sLaListeIci SEPAREE PAR RC // Pour chacune des photos trouvé dans le dossier spécifié plus haut
SI NetEnvoieFichier(nNumCnxFTP, sUneImage, "/ProgramData/PICS/" + ExtraitChaîne(sUneImage, 1, "\", DepuisFin), "Envoie en cours...", 100) = Faux ALORS
Erreur(ErreurInfo(errComplet))
FIN
FIN
NetDéconnecte(nNumCnxFTP) // On se déconnecte de ce serveur pour cette image là.
FIN
FIN
FIN
//------------------------------------------------------------------------------------------------


PS : tu peux essayer le paramètre INTERNET à la place de INTRANET si la qualité de la communication entre les postes n'est pas bonne.

--
Bon dev,
Jean-Pierre
Message modified, April, 24 2017 - 9:14 AM
Registered member
28 messages
Popularité : +2 (2 votes)
Posted on April, 24 2017 - 4:43 PM
Bonjour, et merci beaucoup pour vos interventions
Mon souci c'est que quelque soit ce que je fait, j'obtiens toujours une erreur.
J'ai inséré des temporisations entre chaque envoie, de manière à ce qu'il ait du temps entre chaque transfert, mais ça n'a pas fonctionné.
Le code que @Jean-Pierre à tapé, c'est le tout premier que j'avais fait, mais l'erreur qui me revenait était toujours celle-ci :



Et jusqu'à présent, cette erreur persiste
Il dit que l'utilisateur et le mot de passe renseignés sont incorrects, pourtant, c'est bien avec ces identification qu'il a bien commencé le transfert, et ces identifiants sont corrects.
Posted on April, 25 2017 - 8:50 AM
M.Deacon7 a exposé le 24/04/2017 :
Bonjour, et merci beaucoup pour vos interventions
Mon souci c'est que quelque soit ce que je fait, j'obtiens toujours une
erreur.
J'ai inséré des temporisations entre chaque envoie, de manière à ce qu'il ait
du temps entre chaque transfert, mais ça n'a pas fonctionné.
Le code que @Jean-Pierre à tapé, c'est le tout premier que j'avais fait, mais
l'erreur qui me revenait était toujours celle-ci :



Et jusqu'à présent, cette erreur persiste
Il dit que l'utilisateur et le mot de passe renseignés sont incorrects,
pourtant, c'est bien avec ces identification qu'il a bien commencé le
transfert, et ces identifiants sont corrects.


basez-vous sur l'exemple livré en standard (client et serveur rpc)

--
Cordialement JeAn-PhI
Registered member
939 messages
Popularité : +66 (68 votes)
Posted on April, 25 2017 - 9:29 AM
bonjour,

comme l'indique Jean-Phi étudiez bien les fonctions FTP RPC de Windev, car les transferts s'exécutent en tâches de fond, et il ne peu y avoir qu'un seul transfert à la fois.
dans votre code, le paramètre "Envoie en cours..." de NetEnvoieFichier n'est pas bon, windev s'attend à avoir un nom de message windows qui sera transmis et que vous devrez interceptez avec la fonction Evenement.

=> https://doc.pcsoft.fr/fr-FR/?3056010

( étape 2 )

Bon dèv ;)
Registered member
28 messages
Popularité : +2 (2 votes)
Posted on April, 25 2017 - 2:56 PM
Bonjour Christophe. Merci beaucoup pour votre intervention.

Mais pouvez-vous m'aider à comprendre cette erreur s'il vous plaît ?





Et pourtant l'utilisateur et le mot de passe sont corrects, et le fichier WDRPCSRV.INI existe belle et bien sur le serveur.