yuksek82
Messages postés4Date d'inscriptionlundi 23 novembre 2009StatutMembreDernière intervention 4 janvier 2010
-
23 déc. 2009 à 16:20
yuksek82
Messages postés4Date d'inscriptionlundi 23 novembre 2009StatutMembreDernière intervention 4 janvier 2010
-
4 janv. 2010 à 08:40
Bonjour à tous
Je tente de finaliser une une appli en vb6 qui me permet de construire et
d'envoyer des fichiers vers le ftp d'un automate de maniére cyclique toutes les 5 secondes et aussi évenementiel sur bp envoyer.
Pour la partie construction de fichier pas de prblm, pour la partie transfert de fichier j'utile les winsock qui fonctionne pas mal sauf que par moment la com "plante" !! et il me semble quel plante quand je fait autre chose même tres simple du style déplacer une fenetre ou changer d'onglet ... bref quand je déclenche un autre événement.
Pourtant toute ma partie winsock est sur une form indépendante.
On dirait que je loupe des reponses du serveur ftp.
quelqun pourait-il m'aider svp !!
je suis automaticien de base donc plus de la prog cyclique que la prog évenementielle.
d'avance merci.
yuksek82
Messages postés4Date d'inscriptionlundi 23 novembre 2009StatutMembreDernière intervention 4 janvier 2010 23 déc. 2009 à 17:28
Ben en fait je pense que ce n'est pas une erreur sur une ligne en particulier, mais le fait de réaliser une action au moment ou le serveur ftp attend quelque chose de ma part
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 déc. 2009 à 17:39
pareil, pour le savoir faut montrer ton code
as-tu regardé les sources existantes?
winsock est évènementiel, l'utilises-tu bien de cette manière?
j'peux te poser 50 questions comme çà .... : montre ton code on ira plus vite
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 24 déc. 2009 à 03:37
Salut
Si tu as un message (erreur ou arrêt protocolaire), il serait bon de dire lequel, que l'on sache qui/quoi provoque l'erreur.
La réponse est souvent dans le texte de l'erreur.
D'autre part, transférer un fichier toutes les 5 sec me semble limite, mais tout dépend de la taille du fichier.
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
yuksek82
Messages postés4Date d'inscriptionlundi 23 novembre 2009StatutMembreDernière intervention 4 janvier 2010 24 déc. 2009 à 08:59
tout d'abord merci de vos reponses.
mes fichiers font maxi 10K don pas énormes. si je démarre l'appli et que je la laisse tourné sans y touché pas de prob.
Voici mon code au k ou (cela fait seulement 15j que g découvert VB donc toute vos remarques ou critiques seront pour moi des conseils)
Encore merci de votre aide.
Public Sub Command1_Click()
Reset
ftp_fichier = "prog.po"
cmde_ftp ("RETR ")
End Sub
Private Sub Form_Load()
FTP.Close
status.Text = "connection ..."
FTP.Connect
End Sub
Private Sub FTP_Close()
status.Text = "connection terminée"
End Sub
Private Sub FTP_Connect()
status.Text = "connection ok"
FTP.SendData "USER datastorage" & vbCrLf
End Sub
Private Sub FTP_DataArrival(ByVal bytesTotal As Long)
Dim z As Integer
Dim ff As Integer
Dim ff2 As Integer
Dim annee As String, mois As String, jour As String, tempo As String, name As String, rep As String
For i = 0 To UBound(temp) - 1
Text3 = Text3 & Now & " " & temp(i) & vbCrLf & " " & " " & " "
Text3.SelStart = Len(Text3) - 1
Next i
code_reponse = Left(ftp_texte_recu, 3)
code.Text = code_reponse
If ftp_const_code_rep = 220 Then
ftp_construct.SendData "USER datastorage" & vbCrLf
End If
If code_reponse = 331 Then
status.Text = "demande log"
FTP.SendData "PASS datadownload" & vbCrLf
End If
If code_reponse = 230 Then
status.Text = "log ok connecté"
If marqueur = True Then 'And ftp_fichier <> "base.traca" And ftp_fichier <> "base.al" Then
status.Text = "dm traca"
ftp_fichier = "base.traca"
cmde_ftp ("RETR ")
End If
End If
If code_reponse = 215 Then
FTP.SendData "TYPE I" & vbCrLf
End If
If code_reponse = 200 Then
status.Text = Val(marqueur)
End If
If code_reponse = 227 Then
Call calcul_port(ftp_texte_recu)
port_ouvert = True
status.Text = "Attente commande"
End If
If code_reponse = 226 Then
code.Text = code_reponse & " ok "
If commande2 = "STOR " Then
status.Text = "envoie ok"
FTP_up.Close
modif_prg = False
If ftp_fichier = "prog.po" Then
modif_prg = False
nouv_prg = 0
End If
If ftp_fichier = "produits.prod" Then
ftp_fichier = "fiche_prod.prod"
cmde_ftp ("STOR ")
End If
End If
If commande2 = "RETR " Then
If ftp_fichier "base.traca" Or ftp_fichier "base.al" Then
tempo = Date$
annee = Year(tempo)
mois = Month(tempo)
jour = Day(tempo)
If ftp_fichier = "base.traca" Then ' enchaine avec le fichier alarme
rep = Dir("C:\fichier duranel\archive" & annee, vbDirectory)
If rep = "" Then
If rep <> ".." Then
If rep <> "." Then
MkDir ("C:\fichier duranel\archive" & annee)
End If
End If
End If
rep = Dir("C:\fichier duranel\archive" & annee & "" & mois, vbDirectory)
If rep = "" Then
If rep <> ".." Then
If rep <> "." Then
MkDir ("C:\fichier duranel\archive" & annee & "" & mois)
End If
End If
End If
free = FreeFile
name = "C:\fichier duranel\archive" & annee & "" & mois & "" & annee & "_" & mois & "_" & jour & ".traca"
Open (name) For Output As #free
Print #free, ftp_buffer_recp
Close #free
FTP_down.Close
status.Text = "Retour f traca ok"
ftp_fichier = "base.al"
cmde_ftp ("RETR ")
Else
If ftp_fichier = "base.al" Then
name = "C:\fichier duranel\archive" & annee & "" & mois & "" & annee & "_" & mois & "_" & jour & ".al"
Open (name) For Output As #free
Print #free, ftp_buffer_recp
Close #free
status.Text = "Retour f al ok"
FTP_down.Close
ftp_fichier = "base.traca"
cmde_ftp ("DELE ")
End If
End If
Else
status.Text = "Retour ok"
Form1.ffileopen ("C:\fichier duranel" & ftp_fichier)
While fileopen = True
DoEvents
Wend
free = FreeFile
Text3.Text = ftp_buffer_recp
Open "C:\fichier duranel" & ftp_fichier For Output As #free
Print #free, ftp_buffer_recp
Close #free
FTP_down.Close
If modif_prg = False Then
Form1.actualise (1) 'actualise le programme journalier
End If
If ftp_fichier = "prog.po" Then ' enchaine avec le fichier synchro
ftp_fichier = "sync.vie"
cmde_ftp ("RETR ")
Call synchro
End If
End If
End If
End If
If code_reponse = 250 Then
If ftp_fichier = "base.traca" Then
ftp_fichier = "base.al"
cmde_ftp ("DELE ")
End If
If ftp_fichier = "base.al" Then
move_dossier_archive ("\\serveur\Archives\archive_duranel")
marqueur = False
End If
status.Text = "fichier suprimé :" & ftp_fichier
modif_prg = False
End If
If Mid(code_reponse, 1, 1) 5 And code_reponse <> 550 Or Mid(code_reponse, 1, 1) 4 And code_reponse <> 425 Then ' Reponse négative fermeture connection
modif_prg = False
If code_reponse = 550 Then ' fichier introuvable sur la carte
If ftp_fichier <> "base.traca" And ftp_fichier <> "base.al" Then
MsgBox ("Fichier" & ftp_fichier & " introuvable sur la carte")
modif_prg = False
Else
status.Text = "Pas de f traca dispo"
marqueur = False
End If
FTP.SendData "ABOR"
FTP_up.Close
FTP_down.Close
FTP.Close
FTP.Connect
End If
End Sub
Private Sub FTP_down_Connect()
port_ouvert = True
End Sub
Private Sub FTP_down_DataArrival(ByVal bytesTotal As Long)
Dim datas As String
status.Text = "Téléchargement en cours ..." ' Télécharge le fichier
FTP_down.GetData datas
ftp_buffer_recp = ftp_buffer_recp & datas
End Sub
Private Sub FTP_down_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
Dim v As Long
If storeinprogress = False Then
storeinprogress = True
pgb1.Value = 0
pgb1.Max = (bytesRemaining + bytesSent)
End If
v = (pgb1.Max - bytesRemaining)
pgb1.Value = v
Text1.Text = bytesSent
Text2.Text = bytesRemaining
End Sub
Private Sub FTP_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
status.Text = "Erreur"
FTP.Close
status.Text = "connection ..."
FTP.Connect
End Sub
Private Sub FTP_SendComplete()
storeinprogress = False
pgb1.Value = 0
End Sub
Private Sub FTP_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
Dim v As Long
If storeinprogress = False Then
storeinprogress = True
pgb1.Value = 0
pgb1.Max = (bytesRemaining + bytesSent)
End If
v = (pgb1.Max - bytesRemaining)
pgb1.Value = v
Text1.Text = bytesSent
Text2.Text = bytesRemaining
End Sub
Private Sub FTP_up_Connect()
FTP_up.SendData ftp_buffer_env & vbCrLf
storeinprogress = False
status.Text = "connection au canal ok"
ip.Text = FTP_up.RemoteHost
port.Text = FTP_up.RemotePort
port_ouvert = True
End Sub
Private Sub FTP_up_SendComplete()
FTP_up.Close
port_ouvert = False
storeinprogress = False
End Sub
Private Sub FTP_up_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
Dim v As Long
If storeinprogress = False Then
storeinprogress = True
pgb1.Value = 0
pgb1.Max = bytesRemaining + bytesSent
End If
v = pgb1.Max - bytesRemaining
pgb1.Value = v
Text1.Text = bytesSent
Text2.Text = bytesRemaining
End Sub
Private Sub init_com_Click()
FTP_up.Close
FTP_down.Close
FTP.Close
status.Text = "reconnection ..."
FTP.Connect
End Sub
Private Sub Timer2_Timer()
If marqueur False And modif_prg False And nouv_prg <> 6 And (Left(code_reponse, 1) = 2 Or Left(code_reponse, 1) = 5) And run_com = False Then
Call Command1_Click
End If
End Sub
Private Function synchro()
Dim z As Integer
Dim buff
sync(1) = "0"
sync(2) = Date
sync(3) = Time
For z = 1 To 4
buff = buff + sync(z)
Next z
Open "C:\fichier duranel\sync.vie" For Output As #1
z = 0
While z < 4
z = z + 1
Print #1, sync(z)
Wend
Close #1
ftp_fichier = "sync.vie"
cmde_ftp ("STOR ")
End Function
Private Sub calcul_port(s As String)
Dim p1 As Integer
Dim p2 As Integer
Dim s_port As String
Dim t() As String
Dim adrIP As String
Dim v_port As Long
p1 = InStr(s, "(")
p2 = InStr(s, ")")
status.Text = "calcul port ..."
If p1 And p2 Then
s_port = Mid$(s, p1 + 1, p2 - p1 - 1)
t = Split(s_port, ",")
If UBound(t()) = 5 Then
adrIP = t(0) & "." & t(1) & "." & t(2) & "." & t(3)
v_port = Val(t(4)) * 256 + Val(t(5))
If commande2 = "RETR " Then
Else
If commande2 = "STOR " Then
Form1.ffileopen ("C:\fichier duranel" & ftp_fichier)
ff = FreeFile
Open "C:\fichier duranel" & ftp_fichier For Binary As #ff
ftp_buffer_env = String$(LOF(ff), " ")
Get #ff, , ftp_buffer_env
Close #ff
FTP_up.Close
FTP_up.RemoteHost = adrIP
FTP_up.RemotePort = v_port
FTP_up.Connect
End If
End If
End If
End If
FTP.SendData commande2 & ftp_fichier & vbCrLf
If commande2 = "STOR " Then
End If
End Sub
Private Function cmde_ftp(commande As String)
port_ouvert = False
Do While Left(code_reponse, 1) <> 2
Loop
If commande = "STOR " Then
FTP.SendData "PASV" & vbCrLf
FTP.SendData "TYPE I" & vbCrLf
'FTP.SendData commande & ftp_fichier & vbCrLf
End If
If commande = "DELE " Then
FTP.SendData commande & ftp_fichier & vbCrLf
End If
If commande = "RETR " Then
ftp_buffer_recp = ""
FTP.SendData "PASV" & vbCrLf
FTP.SendData "TYPE I" & vbCrLf
' FTP.SendData commande2 & ftp_fichier & vbCrLf
End If
commande2 = commande
End Function
Private Sub move_dossier_archive(vers As String)
Dim fso2, fldr
Dim de As String
On Error GoTo fin
de = "C:\fichier duranel\archive"
Set fso2 = CreateObject("scripting.fileSystemObject")
fso2.copyfolder de, vers
status.Text = "Dossier d'archive copier sur serveur"
ar_date.Text = Now
ar_place.Text = vers
Exit Sub
fin:
MsgBox "chemin de sauvgarde indisponible"
End Sub