Petit problème avec Inet (Composant)

Signaler
Messages postés
14
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
2 juin 2009
-
Messages postés
14
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
2 juin 2009
-
Bonjour à tous,


J'avais téléchargé ici sur le site un exemple avec le composant Inet, tout fonctionnait bien excepté lorsque je voulais arrêter le projet (soit par le bouton Stop ou le X de la fenêtre). À ce moment là le projet gelait et j'étais obligé d'arrêter le processus de VB6 à l'aide de Ctrl+Alt+Del... J'ai donc décidé de faire mon propre projet à partir de zéro. Tout fonctionnait très bien. Je pouvait me connecter/déconnecter à un site ftp et aussi uploader/downloader des fichiers. J'ai continué à programmer et maintenant j'ai le même problème que dans l'exemple. Je n'avais pas fait de backup alors j'ai recommencé le projet encore une fois et je ne fait que me connecter et déconnecter et lorsque je ferme le projet ça gèle. J'utilise Serv-U comme serveur FTP. Quelqu'un aurait une idée pourquoi ça gèle lorsque j'arrête mon projet alors que ça marchait avant... ??

Voici: ce que mon code fait.
Private Sub cmdConnect_Click()
Inet1.Protocol = icFTP 'declaration protocole
Inet1.URL = "ftp://USER:PASSWORD@ftp.site.ca" 'Url inet1
Label1.Caption = "Connected"
Do Until Inet1.StillExecuting = False 'boucle pendant inet actif
DoEvents
Loop
Inet1.Execute , "cd 810"
Do Until Inet1.StillExecuting = False 'boucle pendant inet actif
DoEvents
Loop
Label1.Caption = "cd 810"
End Sub


Private Sub cmdDisconnect_Click()
Inet1.Execute , "close"
Do Until Inet1.StillExecuting = False 'boucle pendant inet actif
DoEvents
Loop
Label1.Caption = "Disconnect"
End Sub


Private Sub Inet1_StateChanged(ByVal State As Integer)
Select Case State
Case icError ' 11
' En cas d'erreur, renvoie ResponseCode et ResponseInfo
MsgBox Inet1.ResponseCode & ":" & Inet1.ResponseInfo
End Select
End Sub

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Salut
Je n'ai pas rencontré ce problème, mais surement dû à une boucle sans fin et sans DoEvent.
Vérifie si quelque part tu n'aurais pas un Do-Loop qui bouclerait ou un For-Next dont la variable serait déclarée en Public et dont la valeur serait modifiée ailleurs dans le même programme.

Eventuellement, si tu restes dans un de tes "Do Until" :
- Définis en Public ArretProgramme As Boolean dans un module
- Dans ton Form_QueryUnload, ajoute ArretProgramme = True puis quelques DoEvents ou/et un Inet1.Cancel
- Dans chaque boucle Do-Loop en rapport à une attente de ton iNet1 :
Do Until Inet1.StillExecuting = False Or ArretProgramme 'boucle pendant inet actif
DoEvents
Loop
If ArretProgramme Then Exit Sub/Function

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Messages postés
14
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
2 juin 2009

Bon, j'ai même diminué mon code. Le code ci-dessous est tout ce que contient mon programme. Je l'ai simplifié au maximum, il ne reste que les 11 lignes de codes que tu vois ci-dessous. Il n'y a aucune boucle sans puisque je vois dans mon label "connected" lorsque je veux me connecter et "disconnected" lorsque je veux me déconnecter c'est donc que j'ai réussi a passer la boucle Do Until Inet1.StillExecuting = False. Sur le serveur FTP je vois que je suis connecté et je vois lorsque je me déconnect aussi donc le code fonctionne bien. C'est le processus VB6 qui reste gelé, et c'est forcément à cause du controle Inet puisque si je n'utilise pas les boutons connect et disconnect et bien je peux fermer le programme sans problème. D'autres idées ???

Private Sub cmdConnect_Click()
Inet1.Protocol = icFTP 'declaration protocole
Inet1.URL = "ftp://USER:PASSWORD@ftp.site.ca" 'Url inet1
Do Until Inet1.StillExecuting = False 'boucle pendant inet actif
DoEvents
Loop
Label1.Caption = "Connected"
End Sub
Private Sub cmdDisconnect_Click()
Inet1.Execute , "close"
Do Until Inet1.StillExecuting = False 'boucle pendant inet actif
DoEvents
Loop
Label1.Caption = "Disconnect"
End Sub
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Ca ne m'avait pas sauté aux yeux, mais la première partie ne suffit pas à établir une connexion.
(ça serait vrai avec un Winsock, mais pas avec Inet qui est un composant plus sophistiqué)
Tu ne fais que définir le site, rien d'autre. Normal donc qu'il n'attende pas dans le 1er Do-Loop.
Il ne sera en exécution (StillExecuting) que lorsqu'il y aura une action "Execute" avec une commande (genre CD) ou un Get ou Put de fichier.
Donc, avec Inet, il n'y a pas d'état 'Connecté' puisqu'il se connecte à chaque commande.
Si tu as besoin d'un Login/Password, vois avec les Inet1.UserName, .Password

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Messages postés
14
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
2 juin 2009

bon j'viens de vérifier ce que tu dis et oui tu as raison. J'ai un peu trop simplifier mon code... avant j'utilisait ce même code, mais je fesais du .execute " cd /810" et aussi du upload/download. Mais, le problème n'est pas là, puisque je suis capable d'uploader et de downloader des fichiers sans problèmes tout marche A1. Le problème est situé au niveau de l'arrêt du programme. Pourtant hier, je me connectait, j'utilisait la commande cd, j'uploadais, je downloadais, tout marchait bien et le programme se fermait rapidement. Maintenant, aussitôt que j'utilise le composant Inet, le programme ne se ferme plus.(J'ai fait un test... il se ferme mais au bout d'1 minute genre... c'est assez long) Si j'ouvre le programme que je n'appuis sur aucun bouton et que je le ferme, tout va bien et il se ferme rapidement.

Tu as une idée pourquoi c'est lent lors de la fermeture, alors qu'avant tout était correct ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Salut
Elément nouveau : Il se ferme au bout d'une minute
Cela veut dire que ton INet est en train d'exécuter une commande qui n'arrive pas à terme.
Tu peux réduire ce temps avec le iNet.TimeOut en secondes.
Si tu veux, envoies moi ton code par mail, que je regrade.
Je te le donne dans un message privé.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Messages postés
14
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
2 juin 2009

Hummm, je viens de regarder et la propriété .Timeout n'existe pas pour mon contrôle Inet, peut-être que je n'ai pas une version assez récente...

Néanmoins, après réflexion, si je fais disconnect et que j'attends 10 minutes avant de fermer le programme. Il va quand même falloir que j'attendes 1 à 3 minutes avant qu'il se ferme alors que le .timeout est déjà dépassé théoriquement....