Funcion basica para enviar archivos con winsock

Iniciado por kabukiman, 15 Junio 2007, 12:46 PM

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

kabukiman

Doy por supuesto que sabeis establecer la conexion entre los dos programas



Codigo para el cliente , avisar al server  con una constante para empezar la transaccion

const COMENZAR = 1 ' para preparar la tranferencia
const OK_TRANSFER = 2 'para comenzar la transferencia
dim preparado as boolean
dim tamaño_total as long
dim bytes_recibidos as long

private sub form_load()
preparado = false
recibido = 0
end sub

private sub comenzar()

winsock1.sendata COMENZAR

end sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

dim file() as byte 'array del alamacen del archivo

if not preparado then 

Winsock1.getdata data , vbstring

tamaño_total = clng(data) 'obtenemos su tamaño

preparado = true 'nos preparamos para recibir
recibido = recibido + bytestotal 'sumamos los bits que hemos recibido
redim file(tamaño_total-1)'redimensionamos el array
open "c:\fichero.jpg" for binary access write as #1
'abrimos el fichero

winsock1.sendata OK_TRANSFER

else
winsock1.getdata archivo 'obtenemos los byte que van llegando

put #1,,archivo 'escribimos
recibido = recibido + bytestotal 'vamos acumulando lo que recibimos

if recibido >= tamaño_total then
close #1 'si recibido es mayor igual cerramos el archivo
MsgBox "Descarga completa",vbokonly,"Cliente"
end if


end if
End Sub






Ahora el codigo del server



const COMENZAR = 1 ' para preparar la tranferencia
const OK_TRANSFER = 2 'para comenzar la transferencia

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim cmd As Integer


Winsock2.GetData cmd, vbInteger

select case(cmd)

case COMENZAR
call enviar_grandaria
case OK_TRANSFER
call enviar_fichero
end select

End Sub

private sub enviar_grandaria()
dim size as string


open "c:\archivo.jpg" for binary access read as #1

size = cstr(lof(1))' su tamaño

close #1

winsock2.sendata size 0enviamos el tamaño
ens sub

private sub enviar_fichero()

dim archivo() as byte 'array almacen

open "c:\archvo.jpg" for binary access read as #1
redim archivo(LOF(1)-1) 'redimensionams el array

get#1,,archivo



close #1

winsock2.sendata archivo 'le enviamos el archivo

end sub