Código:
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
Código:
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