Envoyer un image par winsock et UDP

vincentvalentine Messages postés 5 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 23 avril 2007 - 6 avril 2007 à 10:48
vincentvalentine Messages postés 5 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 23 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.


Merci d'avance.

6 réponses

le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 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
0
vincentvalentine Messages postés 5 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 23 avril 2007
6 avril 2007 à 14:25
Merci beaucoup, je test ça rapidement pour voir. SI ça marche pas (ou mal), je te fais signe.
Merci.
0
vincentvalentine Messages postés 5 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 23 avril 2007
18 avril 2007 à 15:25
Bonjour,
désolé j'ai pas pu tester plus tôt (étude oblige).

Je ne comprend pas le début :

'index wsk 
   wsk(0) = pour le texte
    wsk(1) = pour l'image

C'est juste pour m'indiquer que tu utilises 2 sockets ??
0
vincentvalentine Messages postés 5 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 23 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.
0

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

Posez votre question
le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 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)
0
vincentvalentine Messages postés 5 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 23 avril 2007
23 avril 2007 à 18:45
Merci, c'est un peu plus clair.
Je vais tester dès que j'aurai du temps.
A plus tart.
0
Rejoignez-nous