Envi de données avec un winsock

zeunz Messages postés 200 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 30 juin 2008 - 17 janv. 2005 à 22:21
zeunz Messages postés 200 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 30 juin 2008 - 18 janv. 2005 à 20:00
salut les gars,
je suis entrain de concevoir un prog du meme style qu'icq.(tchat) et j'aimerai pouvoir envoyer des fichiers (exe,bmp,txt,...) par un winsock (en config TCP). j'ai vu 2 ou 3 sources ms pr etre franc, je nage completement voir meme noyé. je sais comment utiliser un winsock. dc pas de pb pr envoyer des données de type string. ms envoyer un fichier exe par exemple, ?????
alors je poste ce message avec l'espoir qu'une personne pourra me poster a son tour un source tutoriel sur la partie reception (dataarrival):

WinsClient.GetData Tampon
'Ouvre le fichier avec le nom du fichier à recevoir + l' extention ".tmp" Open App.Path & "\zgeg.tmp" For Binary As #1
put #1, , Tampon ' Imputation du premier paquet dans le fichier

merci de m'aider. je ss perdu.

zeunz

7 réponses

retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
18 janv. 2005 à 08:19
vas voir dans mes sources j'ai un transfert de fichier par winsock et un chat, les deux marchent nickel ;)
0
zeunz Messages postés 200 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 30 juin 2008
18 janv. 2005 à 10:35
ok merci, je vais voir ceci. j'espere pouvoir comprendre comment ca fonctionne
0
zeunz Messages postés 200 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 30 juin 2008
18 janv. 2005 à 11:10
je ne capte pas grand chose de la partie winsock_sendata...
0
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
18 janv. 2005 à 17:55
winsock_sendata? tu ne parles pas plutot de

Private Sub Wsk_DataArrival(ByVal bytesTotal As Long)

?

je fais t'expliquer en gros le fonctionnement de la source:



Private Sub Wsk_DataArrival(ByVal bytesTotal As Long)

On Error GoTo Wsk_DataArrival_Error'gestion d'érreur



Wsk.GetData donnee, vbstring



tempt = Split(donnee, "#", 3)'on sépare offset, taille et données dnas un tableau

Select Case tempt(0)

Case "resinfo":'suite a la requête du resume acceptée, on indique la position a repprendre

bouton2 = True

bouton1 = False

envoi = True

lbltaille.Caption = tempt(2)

Lblrecu.Caption = Val(tempt(1))

prgprogres.Max = Val(lbltaille.Caption)

prgprogres.Value = Val(Lblrecu.Caption)

Wsk.SendData "ok"

Exit Sub

Case "resreq":'requête de resume

bouton2 = True

bouton1 = False

Lblrecu.Caption = tempt(1)

file = GetSetting(App.EXEName, "lastsession", "lastfilese")

prgprogres.Max = FileLen(file)

prgprogres.Value = Val(Lblrecu.Caption)

lbltaille.Caption = FileLen(file)

bytessent = Val(Lblrecu.Caption)

Wsk.SendData "resinfo#" & Lblrecu.Caption & "#" & lbltaille.Caption

ReDim Buffer(16)

Open file For Binary As #1

position = Val(tempt(1))

Exit Sub

Case "sendreq":'requête d'envoi au client

Fichier = tempt(1)

taille = tempt(2)

If MsgBox(Wsk.RemoteHost
& "(" & Wsk.RemoteHostIP & ") tente de vous envoyer le
fichier """ & Fichier & """ (" & taille & " octets)",
vbYesNo + vbQuestion, "Requête d'envoi") = vbYes Then

timerspeed.Enabled = True

recommencer:

CD1.FileName = Fichier

CD1.Filter = "Tous les fichiers (*.*) | *.*"

CD1.CancelError = True

allowmove = False

CD1.ShowSave

If IsExist(CD1.FileName) = True Then


Select Case MsgBox("Attention, le fichier existe déja, voulez vous le
remplacer?", vbExclamation + vbYesNoCancel)

Case vbYes:

Kill Fichier

Case vbNo:

GoTo recommencer

Case vbCancel:

Wsk.SendData "no"

allowmove = True

Exit Sub

End Select

End If

Lblfilesave.Caption = Fichier

lbltaille.Caption = taille

prgprogres.Max = taille

Lblrecu.Caption = "0"

timerspeed.Enabled = True

Wsk.SendData "ok"

file = CD1.FileName

allowmove = True


SaveSetting App.EXEName, "lastsession", "lastfilercvd", file'pour le
resume

Open CD1.FileName For Binary As #2

Seek #2, 1 'on se place au premier octet

Else

Wsk.SendData "no"'envoi du message de refu au serveur

End If



Case "ok":'si le client a bien reçu le paquet précédent, il envoi ok

sendnext'on envoi la suite

Exit Sub





Case "no":'si le client n'accepte pas le transfert

Close #1

envoi = False

bouton2 = False

MsgBox "Transfert refusé!", vbExclamation, "Transfert annulé."

Exit Sub





Case "Fin du transfert":'si le serveur envoi la fin du transfert

If bouton1 False Then bouton1 True

Wsk.SendData "fin recue"'on indique qu'on a bien reçu

islisten = False'n'attends pas de données

MsgBox "Transfert terminé!", vbInformation, "Transfert terminé!"

envoi = False'on active/désactive les boutons

bouton2 = False

Lblspeed.Caption = "0 octets/seconde"

timerspeed.Enabled = False

Lblrecu.Caption = lbltaille.Caption

prgprogres.Value = prgprogres.Max 'on triche un peu :p

Close #2

Wsk.Close

Wsk.Listen

bouton2 = False

Exit Sub

Case "fin recue":'si le client envoi le message de confirmation de la fin reçue

If bouton1 False Then bouton1 True

Wsk.Close 'on ferme le wsk



Case Else:'s'il s'agit de donnéees

bouton2 = True 'pour le controle si les boutons sont cliquables, voir dans les évenements lblxxx.click





Lblrecu.Caption = Val(Lblrecu.Caption) + Val(tempt(1))'tempt(1) contient le nombres de bytes envoyés



If Val(Lblrecu.Caption) > prgprogres.Max Then Lblrecu.Caption = prgprogres.Value 'on ne sais jamais ;)

prgprogres.Value = Val(Lblrecu.Caption)





Put #2, tempt(0), tempt(2) ' écris dans le flux #2 a l'addresse tempt(0) la valeuir de tempt(2)

If pause = True Then

resumes = 1

Exit Sub

End If

Wsk.SendData "ok"

End Select

On Error GoTo 0

Exit Sub



Wsk_DataArrival_Error:'gestion d'erreur

Select Case Err.Number

Case 70: 'on n'as pas pu remplacer le fichier



Case 32755: 'annulation du commondialog



Case Else

MsgBox "Erreur " & Err.Number & " (" &
Err.Description & ") in procedure Wsk_DataArrival of Feuille Form1"
& vbCrLf & "Données reçues: " & donnee, , "Erreur"

Resume Next

End Select

End Sub





la procédure sendnext



Public Sub sendnext()



On Error GoTo sendnext_Error'festion d'erreur



If pause = True Then'si on a mis en pause

resumes = 2'2 pour serveur, 1 pour client

Exit Sub

End If

If Not EOF(1) Then'si pas fin du fichier

envoi = True'on envoi


If Form1.bouton2 False Then Form1.bouton2 True'on active le
bouton(pause)


Get #1, position, strread'on stock la valeur de la position 'position'
du flux #1 dans strread


Form1.Wsk.SendData CStr(position) & "#" & CStr(Len(strread))
& "#" & strread 'ici la procédure d'envoi, type
position#taille#données


position = position + Len(strread) 'on incrémente la position


bytessent = bytessent + Len(strread)'le nombre toal de données envoyée

Else'si fin du fichier

Form1.Wsk.SendData "Fin du transfert"


MsgBox "Envoi terminé!", vbInformation, "Envoi terminé!"

envoi = False

Form1.bouton2 = False


Form1.prgprogres.Value = Form1.prgprogres.Max 'on triche un peu :p


Form1.Lblrecu.Caption = Form1.lbltaille.Caption

Close #1


If Form1.bouton1 False Then Form1.bouton1 True

Exit Sub

End If



Form1.Lblrecu.Caption = bytessent

If bytessent > Form1.prgprogres.Max Then bytessent = Form1.prgprogres.Max

Form1.prgprogres.Value = bytessent





On Error GoTo 0

Exit Sub



sendnext_Error:





MsgBox "Erreur " & Err.Number & " (" &
Err.Description & ") in procedure sendnext of Module Module1", ,
"Erreur"

Resume Next

End Sub





en espérant t'avoir éclairé
0

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

Posez votre question
zeunz Messages postés 200 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 30 juin 2008
18 janv. 2005 à 19:31
merci pr ta reponse, je vais pouvoir etudier ton code de + pres.
je pense que s'il y a qqchose ke je ne comprends pas, je te demanderai plus d'explications.

salutations.

zeunz
0
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
18 janv. 2005 à 19:46
Pas de problème, tu sais ou me trouver: au fait, tu peux aussi jeter un
oeil sur mon chat, il te montreras un exemple de communication serveur
clientS

@+
0
zeunz Messages postés 200 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 30 juin 2008
18 janv. 2005 à 20:00
ok merci. ss pb.
0
Rejoignez-nous