vincentvalentine
Messages postés5Date d'inscriptionmercredi 17 janvier 2007StatutMembreDernière intervention23 avril 2007
-
6 avril 2007 à 10:48
vincentvalentine
Messages postés5Date d'inscriptionmercredi 17 janvier 2007StatutMembreDernière intervention23 avril 2007
-
23 avril 2007 à 18:45
Bonjour,
je réalise un tchat en VB6. Je voudrai avoir la possibilité d'envoyé une image par le control Winsock et le protocol UDP.
Mon image serait chargé dans une zone image de ma form, puis un bonton
envoyer déclencherai l'envoi vers mon correspondant. Celui-ci devrait
recevoir l'image par winsock et udp, et elle serait transmise dans une
zone image de sa form.
J'ai essayé un sendata tout bête, mais ça marche pas à cause de la taille de l'image.
Je sais qu'il faut découper l'image, car une trame IP est tout petit, mais je n'y arrive pas.
J'ai vu ce topic : http://www.developpez.net/forums/sho...=envoi+fichier sur developpez.com,
mais j'ai pas réussi avec cette méthode.
J'ai trouver aussi des codes sources (2) sur ce site, mais rien que j'arrive à adapter... Ou comprendre.
Je voudrait faire le plus simple possible, car je suis débutant en VB et j'ai plus beaucoup de temps devant moi. C'est un projet à rendre après les vacances.
le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009 6 avril 2007 à 13:32
Lu,
pour une bonne reception sans perte le mieux c'est d'utiliser TCP au lieu de UDP
voici un exemple qui découpe une image
' partie serveur
'index wsk
wsk(0) = pour le texte
wsk(1) = pour l'image
Private Sub Command1_Click()
savepicture image1.picture,app.path & "/img.jpg"
Doevents
wsk(0).SendData "img" & filelen( app.path & "/img.jpg")
Doevents
Call Envoi_Img(app.path & "/img.jpg")
end sub
Public Sub Envoi_Img(Url As String)
NewFile = FreeFile
Open Url For Binary As #NewFile
Nbr = LOF(NewFile) / 100000
If Nbr <> Int(Nbr) Then Nbr = Int(Nbr) + 1
For i = 1 To Nbr
If i = Nbr Then temp = Space(LOF(NewFile) - (100000 * (i - 1))) Else temp = Space(100000)
Get #NewFile, , temp
DoEvents
wsk(1).SendData temp
Next i
Close #NewFile
End Sub
' partie client
Dim Num As Integer, temp As Long,etat as long
.....
Private Sub WsK_DataArrival(Index as integer,ByVal bytesTotal As Long)
dim Msg
wsk(index).GetData Msg
select case Msg
case "img": temp = mid(msg,4) '<- taille de l'image qu'on doit recevoir
case "txt" : text1.Text = text1.Text & Msg & vbcrlf
case Else
If Num = 0 Then
Num = FreeFile
Open App.Path & "\screen.jpg" For Binary As #Num
end if
Put #Num, , msg
Etat = Etat + bytesTotal : DoEvents
If Etat = temp Then
Close #Num
Doevents
img.Picture = LoadPicture(App.Path & "\screen.jpg") Num 0: Etat 0
End If
end select
si tu comprends pas, fais moi signe...(sinon.....y'a peut etre des erreurs c'est du code ecrit comme ca sans etre testé avant) ..c'est la sub Envoi_Img qui t'interesse
vincentvalentine
Messages postés5Date d'inscriptionmercredi 17 janvier 2007StatutMembreDernière intervention23 avril 2007 18 avril 2007 à 15:33
En faite, je comprends pas grand chose au code :/
Si j'ai bien compris, avant d'envoyer l'image tu la sauves (savepicture image1.picture,app.path & "/img.jpg"), puis tu l'envois, mais après qu'envois tu ?? J'avous être paumé...
S tu pouvais m'apporter plus de détails, ce serait vraiment sympa. Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009 23 avril 2007 à 10:22
Lu vincentvalentine,
j'ai pour habitude d'utiliser plusieurs winsock, une pour envoyer des fichiers,l'autre pour envoyer des phrases(lors d'un tchat)...Etc
...après,
premiere etape : on enregistre l'image
on prend le fichier
....
call Envoi_Img(app.path & "/img.jpg",winsock1)
....
Public Sub Envoi_Img(Url As String,Wsk_DL as Winsock)
NewFile = FreeFile
' on ouvre le fichier image
Open Url For Binary As #NewFile
Nbr = LOF(NewFile) / 100000
' on découpe l'image en paquets de 100ko If Nbr <> Int(Nbr) Then Nbr = Int(Nbr) + 1
' ici le Int permet d'arrondir la valeur de Nbr
For i = 1 To Nbr
' si la taille nous permets, on rempli un paquet de 100ko de donnée dans notre temp
' sinon on rempli le restant des données inférieur à 100ko
If i = Nbr Then temp = Space(LOF(NewFile) - (100000 * (i - 1))) Else temp = Space(100000)
Get #NewFile, , temp
DoEvents
' on envoi temp Wsk_DL.SendData temp
Next i
Close #NewFile
End Sub
j'ai rajouté dans la procédure,un complément qui te permettra d'utiliser la wsk de ton choix lors de l'appel : call Envoi_Img(app.path & "/img.jpg",winsock1)