Transfert de fichiers via winsock

cs_marwenovich Messages postés 7 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 7 juillet 2012 - 25 janv. 2011 à 17:20
cs_marwenovich Messages postés 7 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 7 juillet 2012 - 24 mars 2011 à 13:37
slt a tous!!!
j'ai besoin d'une petite aide svp !!!!!!!! j'ai un petit code qui permet d'envoyer des fichiers d'un ordinateur a un autre via winsock;;;le fichier est recue mais s'il est seullement un fichier video ou audio,,s'il est un exe ou image ou autre il sera corrompue!!!!!

**au niveau du serveur:*********
*********************************
If InStr(1, sIncoming, "|GETFILE|") <> 0 Then
SendFile Mid$(sIncoming, 10, Len(sIncoming)), SockExplorer
SockExplorer.SendData "|COMPLETE|"



Public Sub SendFile(Filename As String, WinS As Winsock)
On Error Resume Next
Dim FreeF As Integer
Dim LenFile As Long
Dim nCnt As Long
Dim LocData As String
Dim LoopTimes As Long
Dim i As Long
FreeF = FreeFile
Open Filename For Binary As #99
nCnt = 1
LenFile = LOF(99)
WinS.SendData "|FILESIZE|" & LenFile
DoEvents
Sleep (400)
Do Until nCnt >= (LenFile)
LocData = Space$(1024)
Get #99, nCnt, LocData
If nCnt + 1024 > LenFile Then
WinS.SendData Mid$(LocData, 1, (LenFile - nCnt))
Else
WinS.SendData LocData
End If
nCnt = nCnt + 1024
Loop
Close #99
End Sub




[size=50]**au niveau du client:*********
*********************************
If InStr(1, Strdata, "|COMPLETE|") <> 0 Then

Open .FileName For Binary As #1
Put #1, , Strdata
Close #1


**********************************************************************************/size
c'est la partie principale du code,, et mercie d'avance

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 janv. 2011 à 18:17
Salut

Grand classique du Winsock.

Dans ton cas, c'est surement dû au fait que tu lis les données sous forme d'une String (LocData)
Il vaudrait mieux lire un tableau de Bytes

Emission :
Dim LocData() As Byte
(...)
If nCnt + 1024 > LenFile Then
    ReDim LocData(0 To LenFile - nCnt - 1)
Else
    ReDim LocData(0 To 1023)
End If
Get #99, nCnt, LocData()    ' ou LocData(0), à tester
SendData ...


Côté réception, il faudra aussi dimensionner Strdata en un tableau de Byte

Tu aurais été inspiré de lire quelques sources à ce sujet : il y a de bonnes techniques.

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)
0
cs_marwenovich Messages postés 7 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 7 juillet 2012
24 mars 2011 à 13:37
mercie jack pour votre aide :) :) oui je vais testé et mercie,,, l'envoie marche bien sauf avec les images (.jpg) et some times avec des (.exe),,je vais essayé avec votre aide .:) thenkkkk you
0
Rejoignez-nous