Como mandar un picturebox con winsock

Iniciado por Xephiro, 26 Diciembre 2006, 22:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Xephiro

 :huh: :huh: :huh: Buenas XD aqui yo nuevamente con otra pregunta XD...

Como se puede mandar un picturebox por medio de winsock en un sistema cliente - servidor a otro picturebox ?

DrakoX

Sinceramente,
no sabria como hacerlo,

pero si tienes acceso a la imagen,
podrias mandarlo como un archivo normal

salu2

Snort

Tendrias qe guardar la imagen del picturebox en un archivo, y luego mandar el archivo, y al llegar, pon qe si la extension es jpg, bmp, o la qe sea, de imagen, la abra desde el otro picturebox

CeLaYa

tomando la idea de Snort creo que se podría hacer asi:


'Para enviar la imagen lo hago desde un command Button y la guardo en un archivo llamado "x.jpg"

Private Sub Command1_Click()
    Dim x As String, f As Long
    SavePicture Picture1.Picture, "c:\x.jpg"
   
    f = FreeFile
    Open "C:\x.jpg" For Binary Access Read As #f
    x = Space(LOF(f))
    Get #f, , x
    Close #f
   
    winsock1.SendData x
   
End Sub


'Para recibir lo hago con strdata y lo guardo en un archivo "x2.jpg" y luego cargo la imagen en el picture
Private Sub winsock2_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String, f As Long
   
    winsock2.GetData strData
    txtOutput.Text = txtOutput.Text & strData
       
    f = FreeFile
   
    Open "C:\x2.jpg" For Binary Access Write As #f
    Put #f, , txtOutput.Text
    Close #f
    On Local Error Resume Next
    Picture1.Picture = LoadPicture("c:\x2.jpg")
    On Local Error GoTo 0
   
End Sub
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

CeLaYa

he estado probando el código y me surgierón 2 dudas:

1.- ¿Cómo se sabe cuando se ha terminado de enviar todos los datos?, (porque lo que hice fue que se fueran guardando en un archivo los datos como iban llegando) :o

2.- ¿Porque el nuevo archivo no es del mismo tamaño que el original?, casi siempre es mayor y no siempre es del mismo tamaño. :o

:huh: :huh: alguién sabe  :huh: :huh:
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

<?BRoWLi?>

#5
Deberías enviar por lotes... por ejemplo de 1KB... Dim variable as tipo * 1024... entonces la diferencia se notaría menos (mientras menores sean los lotes mejor...) y para saber cuando acaba... envía primero el tamaño...
 
   nuevaVariable = FileLen "pathdelarchivo"
u..

open...
    nuevaVariable =  input(Lof(canal),
  • canal), si lo has avierto... y a continuación...

    ...Close

       ws.senddata nuevaVariable

    x cierto nuevaVariable es Long...

    y luego lo recibes en el dataarrival... if left(buffer, n... y lo igualas a cualquier ProgressBar.. pb.max = buffer...

    y lo que te vaya llegando lo vas añadiendo como long a una nueva variable... o simplemente bytesrecibed en pb.value...

    suerte...
Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV
Piratas.com.es

CeLaYa

BRoWLi gracias por tu comentario, modifique un poco el código que puse y quedo así, aver que opinan, porque es la 1a vez que le meto mano al winsock:

Para enviar


'Aqui le envio el tamaño de la imagen
Private Sub Command1_Click()
    Dim x As String, f As Long
   
    SavePicture Picture1.Picture, "c:\x.jpg"
   
    Tamaño = FileLen("c:\x.jpg")
   
    tcpServer.SendData Str(Tamaño)
   
End Sub

'Espero a que el cliente me conteste que recibio el tamaño de la imagen y ahora si le envio el archivo
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String, f As Long, x As String
    tcpServer.GetData strData
    txtOutput.Text = strData
   
    If strData = "RECIBIDO" Then
        f = FreeFile
        Open "C:\x.jpg" For Binary Access Read As #f
        x = Space(LOF(f))
        Get #f, , x
        Close #f
        tcpServer.SendData x
       
        Kill "C:\x.jpg"
    End If
End Sub


Para recibir

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String, f As Long
   
    tcpClient.GetData strData
    'si el max de progress bar es 1 le pongo el tamaño del archivo
    If ProgressBar1.Max = 1 Then
        ProgressBar1.Max = Val(strData)
        ProgressBar1.Value = 0
        tcpClient.SendData "RECIBIDO"
        t = 0
        Exit Sub
    End If
    'aqui voy recibiendo e incrementando el Progressbar
    txtOutput.Text = txtOutput.Text & strData
    ProgressBar1.Value = bytesTotal
    t = t + bytesTotal

    'Cuando ya lo tengo todo creo un archivo y lo cargo al picture
    If ProgressBar1.Max = t Then
       
        f = FreeFile
        Open "C:\x2.jpg" For Binary Access Write As #f
        Put #f, , txtOutput.Text
        Close #f
        Picture1.Picture = LoadPicture("c:\x2.jpg")
        ProgressBar1.Max = 1
        txtOutput.Text = ""
        Kill "C:\x2.jpg"
    End If
   
End Sub


"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

<?BRoWLi?>

Muy buen code!

Aunque, no he vsto x ninguna parte lo del flujo de datos, ten encuenta que s el archivo es mayor al real (el que se te crea), el prograssbar no será exacto... aunque está muy bien el code... Un saludo!
Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV
Piratas.com.es

DrakoX

lindo code,
lo que seria interesante,
seria ver si existe aguna relación
en el incremento del tamaño,
probandolo con diferentes imagenes,
y de esa forma lograr que el progresbar sea mas preciso


salu2

CeLaYa

Gracias, referente a lo del tamaño de la imagen creo que no me di a entender, lo que pasa esque la imagen que cargo al picture es de 3.5Kb y cuando le pongo SavePicture me crea un archivo de 23kb, creo que es porque lo manda como bmp, y lo tendría que pasar a jpg, pero bueno de eso ya se ha hablado mucho aqui, igual y me pongo a búscarle...
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.