Problèmes avec winsock

Résolu
Asaiel Messages postés 37 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 21 septembre 2006 - 15 oct. 2005 à 10:20
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 16 oct. 2005 à 22:18
Bonjour,

J'utilise une appli vb6 sous windows xp pr lister les fichiers de mon serveur (distant) dans une textbox. Tant que je navigue dans des répertoires peu épais, aucun pbm, mais dès que je tente d'ouvrir des chemin comme c:\windows\system32, le transfert se lance un moment, puis s'arrête et je n'obtiens aucun résultat... J'ajoute que en locale, bien que l'appli soit un peu lente, aucun probleme. Mais des que le tout transite par internet, ca ne foncitonne plus....

Le code:

coté serveur:
Const SEPARATOR As String = "<END>"
On Error GoTo erreur2
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.getfolder(Right(Data, Len(Data) - 3))
For Each X In folder.subfolders
sck.SendData "053<DIR>" & X.Path: DoEvents
Next
For Each X In folder.Files
sck.SendData "053<FILE>" & X.Path: DoEvents
Next
sck.SendData "053" & SEPARATOR
Exit Sub

erreur2:
sck.SendData "0532"

coté client:
Const SEPARATOR As String = "<END>"
Static Buffer As String
If Mid(Data, 4, 1) <> "2" Then
Buffer = Buffer & Data
If Right(Buffer, Len(SEPARATOR)) <> SEPARATOR Then Exit Sub
newdata = Left(Buffer, Len(Buffer) - (Len(SEPARATOR) + 3))
Buffer = ""
For i = 0 To UBound(Split(Right(newdata, Len(newdata) - 3), "053"))
list = Split(Right(newdata, Len(newdata) - 3), "053")(i)
If list <> "" Then
typ = Split(list, ">")(0) & ">"
Form8.lstdir.AddItem typ & Split(list, "")(UBound(Split(list, "")))
End If
Next
Else
b = MsgBox("Le lecteur sélectionné est inaccessible.", vbInformation + vbOKOnly, "Erreur")
End If

Ce que je ne comprends vraiment pas, c'est que chaque fichier fait l'objet d'une procédure d'envoi, donc pourkoi est ce que ca se met à bloquer d'un seul coup.....

Voila, j'aimerais beaucoup terminer ce projet, je compte donc sur vous et vous remercie de votre aide....

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 oct. 2005 à 13:20
umm. ok. çà ne fonctionne pas du tout de cette manière.
en local, oui. tu envoies, tu es certain que le Data de GetData sera la même que le SendData.
mais déjà en Lan, on constate quelques différences. et en Wan, çà devient presque de l'aléatoire.

voici, d'après tes informations, les modifs que j'apporterais...

ATTENTION, j'ai changé tes balises par <.BLABLA> à cause de la colorisation syntaxique
(html, sans rapport pour toi)

et tes codes "053" etc... sont aussi entre <>
pour éviter justement qu'une data le contienne (caractère interdit)


'*** = modif en dessous

'--------------
' coté serveur
'--------------

Const SEPARATOR As String = "<.END>" '<.- déclaré en "(Général)" ou Module
'_______________________________________________________________________

Private Sub Listing_FSO_And_Send()
'blabla avant, déclarations, etc...
On Error GoTo erreur2
Set fso = CreateObject ("Scripting.FileSystemObject")
Set folder = fso.getfolder(Right(Data, Len(Data) - 3))
For Each X In folder.subfolders
'***
sck.SendData "<.053><.DIR>" & X.Path: DoEvents
Next
For Each X In folder.Files
'***
sck.SendData "<.053><.FILE>" & X.Path: DoEvents
Next
'***
sck.SendData "<.053>" & SEPARATOR: DoEvents

'***
Set fso = Nothing
Exit Sub
'****
On Error GoTo 0 'fin gestion

erreur2:
'***
sck.SendData "<.0532>": DoEvents
'****
Debug.Print Err.Description
Err.Clear
Set fso = Nothing
End Sub

'--------------
' coté client
'--------------

Const SEPARATOR As String = "<.END>" '<.- déclaré en "(Général)" ou Module
'_______________________________________________________________________

Private Sub sck_DataArrival_blablabla()
Static Buffer As String
Dim Data As String
' Dim newdata As String
' Dim list As String
' Dim typ As String

Dim DataDir() As String
Dim DataFile() As String

Form1.sck.GetData Data, vbString

'***
'et c'est ici directement qu'il faut gérer le buffer!!!!
Buffer = Buffer & Data
If Right (Buffer, Len(SEPARATOR)) <> SEPARATOR Then Exit Sub

'on remet la Data complète dans Data, sans SEPAR. plus pratique, et çà évite les oublis
Data = Left(Buffer, Len(Buffer) - Len(separ))
Buffer = ""

'on regarde si Data contient le code erreur
If InStr (1, Data, "<.0532>") > 0 Then
MsgBox "Le lecteur sélectionné est inaccessible.", vbInformation + vbOKOnly, "Erreur"
Exit Sub
End If

'on trie fichiers / dossiers
DataDir = Split(Data, "<.053><.DIR>")
DataFile = Split (Data, "<.053><.FILE>")

'on retravaille les tableaux
'DataDir(0) sera vide. la dernière valeur contiendra le dernier dossier
'ainsi que tous les fichiers. on reprend donc juste la gauche
'du dernier jusqu'à la balise des fichiers
DataDir(UBound(DataDir)) = Left(DataDir(UBound(DataDir)), _
InStr(1, DataDir(UBound(DataDir) - 1), "<.053><.FILE>"))

'DataFile(0) aura tous les dossiers + le 1er fichier. même principe, mais Rev (Reverse)
DataFile(0) = Right (DataFile(0), InStrRev(DataFile(0), "<.053><.DIR>") - 1)

'et après, ici, tu fais ce que tu veux....
Dim i As Long

For i = 1 To UBound(DataDir)
Debug.Print "053 DOSSIER = " & DataDir(i)
Next i

For i = 0 To UBound (DataFile)
Debug.Print "053 FICHIER = " & DataFile(i)
Next i

End Sub



<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


nb : à toi de tester en cas de dossier et/ou fichier inexistant dans le retour de Data

++
PCPT [AFCK]
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 oct. 2005 à 11:04
salut,
***il manque tes DoEvents pour le <END> et le ERROR...
***tu as oublié de faire un sck.GetData DATA
***espérons que les constantes soient déclarées en Générale

PCPT
0
Asaiel Messages postés 37 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 21 septembre 2006
15 oct. 2005 à 11:20
Salut,

Merci de ta réponse, en effet il manque des doevents que je vais rajouter.

En ce qui concerne le get data, je nai mis qu'une portion du code en illustration, mais je l'ai bien evidemment ecrit dans le code de l'appli, sans ca j'aurais rien du tout, meme pas en local...:D

En tout cas je te remercie, et pour le reste ca te parait bon?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 oct. 2005 à 11:38
et bien une chose me gène également, c'est l'acceptation du buffer + tests uniquement si le 4e carac n'est pas un "2" (donc pas ton erreur 0532 supposée".
il est possible que tu listes plusieurs fichiers et que ta partie soit coupée à ....
"blablablabla053syst" "em32blablabla etc......053 etc...."
ou même juste un dossier normal nommé 2file (donc précédé de 053)
donc tu aurais un code erreur parce que la découpe n'est pas toujours faite comme on le croit.

et pour le reste, il me faudrait un peu plus de code (les vraies déclarations, etc...) pour être certain de ne pas t'induire en erreur

PCPT [AFCK]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Asaiel Messages postés 37 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 21 septembre 2006
15 oct. 2005 à 12:16
En effet, tu formule la une remarque particulièrement judicieuse à laquelle je n'avais pas pensé....... Tu as otut a fait raison et je me penche illico sur le pbm, en attendant je te laisse quand meme l'ensemble du code (avant modification):

coté serveur:
Const SEPARATOR As String = "<END>"
On Error GoTo erreur2
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.getfolder(Right(Data, Len(Data) - 3))
For Each X In folder.subfolders
sck.SendData "053<DIR>" & X.Path: DoEvents
Next
For Each X In folder.Files
sck.SendData "053<FILE>" & X.Path: DoEvents
Next
sck.SendData "053" & SEPARATOR: DoEvents
Exit Sub

erreur2:
sck.SendData "0532": DoEvents

coté client:
Const SEPARATOR As String = "<END>"
Static Buffer As String
Dim newdata As String
Dim Data As String
Dim list As String
Dim typ As String

Form1.sck.GetData Data, vbString

Select Case Left(Data, 3)
Case is ="053"
If Mid(Data, 4, 1) <> "2" Then
Buffer = Buffer & Data
If Right(Buffer, Len(SEPARATOR)) <> SEPARATOR Then Exit Sub
newdata = Left(Buffer, Len(Buffer) - (Len(SEPARATOR) + 3))
Buffer = ""
For i = 0 To UBound(Split(Right(newdata, Len(newdata) - 3), "053"))
list = Split(Right(newdata, Len(newdata) - 3), "053")(i)
If list <> "" Then
typ = Split(list, ">")(0) & ">"
Form8.lstdir.AddItem typ & Split(list, "")(UBound(Split(list, "")))
End If
Next
Else
b = MsgBox("Le lecteur sélectionné est inaccessible.", vbInformation + vbOKOnly, "Erreur")
End If
End Select

Je crois que j'ai rien oublié, sinon je posterais ce qui manque.... En tout cas merci a toi de te pencher sur le problème :D
0
Asaiel Messages postés 37 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 21 septembre 2006
15 oct. 2005 à 19:51
Merci beaucoup d'avoir consacré du temps a ce problème.

J'ai appliqué ta méthode et ca a l'air de tres bien marcher (encore + vite qu'avant). J'ai simplement corrigé un ou deux bugs et tout a l'air bon, en tout cas en local.

Je le testerais demain via internet et te tiendrais au courant.

En tout cas, mille fois merci de m'avoir consacré un peu de temps.

Asaiel
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 oct. 2005 à 20:20
ok, j'attend les retours
ps : tu pourras m'indiquer les "un ou deux bugs" par curiosité?

++
PCPT [AFCK]
0
Asaiel Messages postés 37 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 21 septembre 2006
16 oct. 2005 à 22:07
Re

Alors la, je n'ai qu'un seul mot: MERCI,MERCI,MERCI,MERCI,MERCI,MERCI

Ca marche nickel, exactement comme je le voulais et assez rapidement, c vraiment génial.

Concernant les corrections que j'ai apportées, il ne s'agit pas a proprement parler de bugs, mais simplement d'adaptations faites au code pour qu'il s'intègre bien dans mon appli, mais ta méthode marche nickel...

Donc encore une fois MERCI d'avoir consacré un peu de temps à ce problème... J'en recontrerai surement d'autres, j'espère que l'on aura de nouveau l'occasion de discuter à ce moment la...

Asaiel
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 oct. 2005 à 22:18
je me disais aussi .. pas de bug

il y a un point à mieux gérer par contre....
dans ton FSO, pour le OnError, il faut faire un sck.SendData "<0532>" & SEPARATOR: DoEvents
bah vui .. sinon, le client attendra toujours une suite alors qu'il n'y en aura pas ;)

@ bientôt. content quez tu sois content
PCPT [AFCK]
0
Rejoignez-nous