Donnée erronée avec winsock

RMOINAS Messages postés 98 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 16 septembre 2006 - 23 mai 2005 à 18:46
RMOINAS Messages postés 98 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 16 septembre 2006 - 24 mai 2005 à 15:14
Salut



Je viens de commencer a utiliser winsock et je dois avouer que
s'est assez simple pour télécharger un fichier seulement j'ai un
probleme le fichiers que je reçois est erroné : par exemple une image
ne seras pas parfaite il y auras des carré bleu sur celle-ci.

De plus pour une archive rar le fichier a une fin non annocée.

J'ai régardé le code des fichier a partir de worpad et j'ai comparé
l'original avec celui que j'ai téléchargér tout se ressemble a
l'exeption de 2 ou 3 lignes qui elles sont différentes pas grand choses
juste un saut de ligne alors qu'il n'y en a pas où l'ajout de caractère
sur un morceau de la ligne.



S'est assez embetant et j'aimerais sa voir comment éviter se ggenre
d'erreur avec winsock etant donnée que sa me le fait a tout mes
fichiers.



Pour les code s'est :



Private Sub Command1_Click()

Winsock1.Close

Winsock1.Connect "r.moinas.free.fr", "80"

End Sub



Private Sub Winsock1_Connect()

Label1.Caption = "Connection réussite"

Winsock1.SendData "GET /design/image/BlocBas/Bas.rar HTTP/1.1" & vbCrLf & _

"User - Agent: VB OpenUrl" & vbCrLf & _

"Host: r.moinas.free.fr" & vbCrLf & _

"cache -Control: no -cache" & vbCrLf & vbCrLf



End Sub



Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

On Error Resume Next

Label1.Caption = "part1"

Dim cData As String

Winsock1.GetData cData



If TotalLoad = 0 Then

LenEntete = Len(Left(cData,
InStr(cData, Chr(13) & Chr(10) & Chr(13) & Chr(10)) + 4))

cData = Mid(cData,
InStr(cData, Chr(13) & Chr(10) & Chr(13) & Chr(10)) + 4,
Len(cData))

TotalLoad = Len(cData) - LenEntete

End If



Open "c:/Bas.rar" For Append As #1

Print #1, cData;

Close #1





End Sub



Private Sub Winsock1_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)

Label1.Caption = "Erreur numero " & Number & " : " & Description

End Sub





Code simple mais s'est seulement pour le test de winsock



si vous pouviez m'aider merci et @++

4 réponses

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
23 mai 2005 à 20:21
Normal le parsing est pas tres bon...

ajoute une variable global vdata as string
dans data arrival fait juste

dim var as string
winsock1.getdata var
vdata=vdata & var

puis dans winsock_close

open "monfichier.txt" for output as #1:close #1
open "monfichier.txt" for binary as #1
put #1,,vdata
close #1

@+


E.B.
0
RMOINAS Messages postés 98 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 16 septembre 2006
23 mai 2005 à 20:42
Ok merci de m'avoir repondu je vais aller testé sa de suite
0
RMOINAS Messages postés 98 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 16 septembre 2006
23 mai 2005 à 21:58
Bon après essaie sa na marche pas j'ai du faire quelque chose de
mauvais enfin toujtours est-il que j'ai trouvé une nouvelle façon seul
hic sa plante lors du télchargement:



Voilà le nouveau code de dl

Private Sub Winsock1_Connect()

Label1.Caption = "Connection réussite"

Winsock1.SendData "GET " & nom & " HTTP/1.1" & vbCrLf & _

"User - Agent: VB OpenUrl" & vbCrLf & _

"Host: " & adresse & vbCrLf & _

"cache -Control: no -cache" & vbCrLf & vbCrLf

Open "c:" & fichier For Append As #1

End Sub



Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

On Error Resume Next

Dim cData As String

Winsock1.PeekData cData





If Not InStr(UCase(cData), UCase("Content-Length: ")) = 0 Then

TailleTotal = Left(Mid(cData, InStr(UCase(cData),
UCase("Content-Length: ")) + 16, Len(cData)), InStr(Mid(cData,
InStr(UCase(cData), UCase("Content-Length: ")) + 16, Len(cData)),
vbCrLf))

End If



If TotalLoad = 0 Then

LenEntete = Len(Left(cData, InStr(cData, Chr(13) & Chr(10) & Chr(13) & Chr(10)) + 4))

End If



Text2.Text = (100 * (Len(cData) - LenEntete + 1)) / TailleTotal & " %"



If Len(cData) - LenEntete + 1 = TailleTotal Then

Open "c:" & fichier For Input As #1

LenEntete = Len(Left(cData,
InStr(cData, Chr(13) & Chr(10) & Chr(13) & Chr(10)) + 4))

cData = Mid(cData,
InStr(cData, Chr(13) & Chr(10) & Chr(13) & Chr(10)) + 4,
Len(cData))

TotalLoad = Len(cData) - LenEntete

Print #1, cData

Close #1

End If



TotalLoad = FileLen("c:" & fichier)



End Sub



Je n'utilise donc plus get data mais peekdata et sa marche je peux
télécharger une image ou un rar sans probleme mais sa plante lors des
téléchargement de 1 mo ou plus en fait le dl se fait mais le log lui
plante et s'est assez énevant

savez-vous comment régler se probleme ??



Merci encore EBArtSoft
de t'être intéréssé a mon probleme .



et merci d'avance pour vos autre reponse
0
RMOINAS Messages postés 98 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 16 septembre 2006
24 mai 2005 à 15:14
S'il vous plait aidez moi . est-ce vraiment impossible de faire cela??
0
Rejoignez-nous