Pb reception de fichier

[Résolu]
Signaler
Messages postés
133
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
11 août 2010
-
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Salut, j'ai modifier un peu la source de quelqu'un que j'ai trouver sur VBfrance qui servait a envoyer des photos qui utilisé le control winsock, mais la connection se faisait sur notre ordinateur et non sur celui de quelqu'un d'autre.
J'aimerai bien l'intergrer dans mon programme pour envoyer de photo par internet mais lorsque la photo est sur l'ordi de l'autre personne on ne peut pas l'ouvrir, y a marqué "aucun aperçu disponible".
J'en ai déduit que cela devait venir lors de l'assemblage des morceaux de la photo mais je n'en sais trop rien donc si vous avez un avi.
J'ai essayer aussi d'envoyer une archive winrar et ça ne fonctionner toujours pas.

Voilà le code que j'utilise pour envoyer le fichier en plusieurs morceaux :

Private Sub Wck_DataArrival(ByVal bytesTotal As Long)
Dim ClientData As String
Wck.GetData ClientData
Select Case Left(ClientData, 4)
Case "/CON": TextInfoServeur = "connecter"
Case "/PIC"
Dim Temp As String
If Nf = 0 Then
Nf = FreeFile
Open (Text2.Text) For Binary Access Read As #Nf
Avancement.Max = LOF(Nf)
End If
Select Case (LOF(Nf) - Seek(Nf) + 1)
Case Is > 2048
Temp = Space(2048)
Get #Nf, , Temp
Avancement.Value = Seek(Nf)
Wck.SendData "/PIC" & Temp

Case Is < 1
Close #Nf
Nf = 0
Wck.SendData "/PICxx-EOP-xx"


Case Else
Temp = Space(LOF(Nf) - Seek(Nf) + 1)
Get #Nf, , Temp
Avancement.Value = Seek(Nf) - 1
Wck.SendData "/PIC" & Temp
End Select
End Select
End Sub

Et lors de la reception du fichier :

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
Winsock.GetData Data
Select Case Left(Data, 4)


Case "/PIC":
If Data = "/PIC" Then
Nf2 = FreeFile
On Error Resume Next
Kill App.Path & "\TMPPIC" & Extension
Open App.Path & "\TMPPIC" & Extension For Output As #Nf2
Winsock.SendData "/PIC"
Else
If Data <> "/PICxx-EOP-xx" Then
Print #Nf2, Right(Data, Len(Data) - 4);
Winsock.SendData "/PIC"
Else
Close #Nf2
Nf = 0
End If
End If
End Select
End Sub

J'aimerai bien que vous m'indiquez comment procéder pour remédié à ce probleme ou si vous connaissez un autre moyen.

Merci, LA biode.

10 réponses

Messages postés
133
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
11 août 2010

Voilà j'ai trouver la solution, il ne faut pas envoyer 2048 ko mais 1024. Pouquoi?Je ne sais pas mais l'essentiel est que cela marche.Mais si vous savez pourquoi et bien merci de m'y faire part.

Voilà la modif à faire :

Select Case (LOF(Nf) - Seek(Nf) + 1)
Case Is > 1024
Temp = Space(1024)
Get #Nf, , Temp
Avancement.Value = Seek(Nf)
Wck.SendData "/PIC" & Temp

Les modifications à effectuer sont en rouge.

La Biode.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
l'écriture pose problème.

tu dois faire un Open For Binary Access Write

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
133
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
11 août 2010

Salut, j'ai fais la modification comme tu me l'as indiqué enfin comme je l'ai compris :

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
Winsock.GetData Data
Select Case Left(Data, 4)


Case "/PIC":
If Data = "/PIC"
Nf2 = FreeFile
On Error Resume Next
Kill App.Path & "\TMPPIC" & Extension
Open App.Path & "\TMPPIC" & Extension For Binary Access Write As #Nf2
Winsock.SendData "/PIC" 'demande la suite
Else
If Data <> "/PICxx-EOP-xx"
Print #Nf2, Right(Data, Len(Data) - 4);
Winsock.SendData "/PIC"
Else
Close #Nf2
Nf = 0
End If
End If
End Select
End Sub

SAuf qu'il y a encore une erreur au niveau de la ligne qui est signalé en rouge. Le type de cette erreur est "mode d'acces au fichier incorrecte" je n'arrive pas a trouver comment contourner cette erreur. Sais tu de quoi cela vient il?

Merci, La Biode.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
en Binary, on ne peux pas utiliser Print...

met simplement :



Put #Nf2, , Right$(Data, Len(Data) - 4)

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
133
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
11 août 2010

Cela ne fonctionne toujours pas :( impossible d'afficher l'image, d'ouvrir un fichier zip ou encore de lire une chanson qui ne plante pas ... aprés y avoir transferé par mon programme.

Connaitrerai tu un autre moyen ou des tutos pour pouvoir envoyer des fichiers via winsock ?

Merci, La Biode.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
ton code n'est pas trop mal, en réalité....

remplace le test
If Data = "/PIC"

par

If Nf2 = 0 Then

car DATA commence bien par "/PIC" mais avec plein de choses ensuite. Le début est detectable par le fait que Nf2 = 0

si tu veux pouvoir réenvoyer un fichier par la suite, pense à remettre nf2 à 0 :

Close #Nf2
Nf = 0 '# ICI c'est NF2 qu'il faut remettre à 0, pas NF

il te manque également 2044 bits, au début :

Open App.Path & "\TMPPIC" & Extension For Binary Access Write As #Nf2
Put #Nf2, , Right$(Data, Len(Data) - 4)

Ajoutes la ligne en rouge, ca devrait être ok ... (j'ai fait le test)
en fait, lors du premier appel, tu as des bits dans Data, il faut les ecrire

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
133
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
11 août 2010

Enfait le code y marche nikel lorsque l'on passe par le réseau mais par contre lorsque l'on passe par internet(connection TCP) les fichiers ne sont pas recréer correctement a l'arrivé :( .
Les tests que tu faisais, tu les faisait en connection directe avec ton pc? Ou alors tu passais par internet?
Je vais te copier mon code complet car si ça se trouve, l'erreur ne vient pas d'ici. Tu me diras ce que tu en penses :

Dim Nf As Integer
Dim Nf2 As Integer
Dim Extension As String
Dim PortSortie As Integer
Dim IpServ As String


Private Sub BTconnec_Click()
IpServ$ = Text1.Text
Wck.Connect IpServ$, mon port
End Sub


Private Sub BTenvoie_Click()
If Len(Text2.Text) > 0 Then
Extension = Right(Text2.Text, 4)
Wck.SendData "/PIC"
End If
End Sub


Private Sub cmdopenfiles_Click()
cmdialselect.ShowOpen
Text2.Text = cmdialselect.FileName
End Sub


Private Sub Form_Load()
Winsock.LocalPort = mon port
Winsock.Listen
End Sub


Private Sub Wck_DataArrival(ByVal bytesTotal As Long)
Dim ClientData As String
Wck.GetData ClientData
Select Case Left(ClientData, 4)
Case "/CON": TextInfoServeur = "connecter"
Case "/PIC"
Dim Temp As String
If Nf = 0 Then
Nf = FreeFile
Open (Text2.Text) For Binary Access Read As #Nf
Avancement.Max = LOF(Nf)
End If
Select Case (LOF(Nf) - Seek(Nf) + 1)
Case Is > 2048
Temp = Space(2048)
Get #Nf, , Temp
Avancement.Value = Seek(Nf)
Wck.SendData "/PIC" & Temp

Case Is < 1
Close #Nf
Nf = 0
Wck.SendData "/PICxx-EOP-xx"

Case Else
Temp = Space(LOF(Nf) - Seek(Nf) + 1)
Get #Nf, , Temp
Avancement.Value = Seek(Nf) - 1
Wck.SendData "/PIC" & Temp
End Select
End Select
End Sub


Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)
If Winsock.State <> sckClosed Then
Winsock.Close
Winsock.Accept requestID
Winsock.SendData "ConnectionOk"
End If


End Sub


Private Sub Wck_Connect()
BTconnec.Caption = "COnnecté"
BTconnec.Enabled = False
Wck.SendData "/CON"
End Sub


Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
Winsock.GetData Data
Select Case Left(Data, 4)


Case "/PIC":
If Nf2 = 0 Then
Nf2 = FreeFile
On Error Resume Next
Kill App.Path & "\TMPPIC" & Extension
Open App.Path & "\TMPPIC " & Extension For Binary Access Write As #Nf2
Put #Nf2, , Right$(Data, Len(Data) - 4)
Winsock.SendData "/PIC"
Else
If Data <> "/PICxx-EOP-xx" Then
Put #Nf2, , Right$(Data, Len(Data) - 4)
Winsock.SendData "/PIC"
Else
Close #Nf2
Nf2 = 0
End If
End If
End Select
End Sub

Si tu pouvais m'aider sa serait génial, mais t'en as déja beaucoup fait ! Sa fait 2 semaines que je bloque dessus je fais presque tout les sites de programmation à la recherche d'une réponse ...

Encore merci ! La Biode.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
vraiment étrange est contextuel, je pense....

ca fonctionnais chez moi, malgré les 2048...

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
133
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
11 août 2010

Mais passais-tu par internet?? ET non en mettant l'ip par défault de ton ordinateur?Ou ton ip réseau?

Si tu passais pas internet alors là je trouve ça étrange oui ...
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
ah, oui, c'est vrai, tu avais soulevé ce point ^^

je ne passais effectivement pas par le net

Renfield
Admin CodeS-SourceS - MVP Visual Basic