Desearia ir en orden por lo que por ahora sentare una especie de marco teorico, y luego entre todos postearemos el codigo respectivo para las pruebas, aportes, mejoras y sugerencias, en si espero que participen todo aquel que pueda y quiera claro.
Ah y una cosa mas, lo que voy a exponer no es sacado de ninguna parte, creo yo (a no ser que me lo demuestren) que es idea original y lo desarrolle hace unos meses, porsupuesto que lo tengo funcionando en mi troyano y quisiera compratirlo con ustedes para (como repito) poder mejorarlo con vuestros aportes...
Marco Teorico
Una transferencia de archivos desde el servidor hasta el cliente (suponemos conexion inversa) se puede hacer hasta por 4 metodos diferentes, cada uno de ellos ofrecen ventajas y desventajas, aunque si se elige el mejor metodo de acuerdo al tamaño del archivo, las ventajas seran mas.Estas son:
1.- Clasico, como su nombre lo dice, todo file manager clasico hasta ahora propuesto lo hace a traves de este metodo, se trata de coger el archivo (sea cual sea su tamaño) meterlo a una variable y transferirlo al cliente.
ventajas: ideal para archivos pekeños
desventajas: no sirve para archivos grandes
2.- Logico, se trata de coger el archivo y trocearlo en partes, solo que esas partes estan en la RAM,y desde alli transferirlo parte por parte al cliente, por ejemplo un archivo de 10MB(10485760 bytes) podria dividirse en 64 partes, cada parte es almacenado en un array de tipo string de 64 posiciones(164KB) en cada celda.
Ventajas:
- Abrir un archivo de 10MB hacia un array string es muchisimo mas rapido que al hacerlo hacia una sola variable string.
- Puesto q la transferencia se hace parte por parte nace el concepto de poder PAUSAR la descarga para mas adelante poder reanudarla.
- Mayor control de la descarga, pues se usa 2 progressbar, una para el avance general y otra para el avance de la acumulacion de los trozos.
Desventajas:
- Nos vemos limitados por la RAM
- no es bueno para archivos muy pequeños, 5kb o 20kb
3. Fisico, es relativo al metodo anterior, pues el metodo logico esta limitado por la RAM, pero ¿que pasa si en vez de trocear el archivo hacia un array de memoria, lo hacemos hacia el disco duro?, pues que ya no hay limite de RAM, se crean 64 archivos en una carpeta oculta, y cada archivo se transfiere por el metodo clasico, en el cliente juntamos los trozos y creamos el archivo final.
Ventajas
- NO hay limite de RAM
- si el archivo original se elimina en el servidor, nosotros lo tenemos en 64 partes divididas, salvo que eliminen tambien los trozos, pero lo ocultamos bien.
- ideal para archivos importantes
- tambien se puede pausar y reanudar
Desventajas
- muy lento, crear archivos en el disco es mas lento que crear variables en la RAM
- 50MB en 64 archivos??? podriamos colapsar la pc de la victima
- tambien no sirve para archivos pequeños
4. Optimo, para mi el mejor de todos obviamente para el tamaño adecuado, este metodo no trozea el archivo, es decir no lo llevamos ni a un array de memoria ni al disco, sino el metodo optimo abre el archivo saca una parte de él en una unica variable tipo string y lo envia al cliente, ésta parte puede ser graduada desde el cliente dependiendo del tamaño del archivo a transferir, esto se repite hasta terminar con todo el archivo, asi no se ocupa ni memoria (en todo caso, es minimo lo que se ocupa) ni mucho menos disco.
Con este metodo, logro transferir archivos de 50MB 100 o 500MB o hasta mas, claro que no es muy rapido pero puedo hacer que lo sea diciendo al servidor que saque partes mas grandes para completar mas rapido el gran archivo, todo se maneja con estricto control ya que tambien aqui algunas ventajas de los metodos logico y fisico se cumplen.
Ventajas:
- ideal para archivos de tamaño muy grande
- se puede tambien pausar y reanudar
- no se necesita transferir todo el archivo ni a memoria ni a disco (solo abrirlo)
- total control con 2 progress bar
Desventajas
- un poco lento, pero se puede evitar
- para archivos medianos, 10 o 20MB se hace muy lento, mejor usar el metodo logico
- ninguna mas, creo
puesto que se puede pausar en los ultimos 3 metodos, entonces puede iniciarse otra descarga, y si se desea pausar esa reanudar la anterior, claro esta que solo podemos transferir un archivo a la vez, aunque supongo que se puede transferir multiples archivos no solo de un mismo servidor sino de otros...
y por ultimo tambien discutiremos las opciones de cancelar descarga y previsualizar (lo que se haya descargado) para casos de archivos mp3 o videos
En el proximo capitulo, (y con todos) arrancamos el proyecto... o hay mas teoria?... las escucho...
si no os agrada la idea, cancelamos la idea...
por cierto requisitos:
un cliente y un servidor conectados (en modo local claro) es todo, es decir partimos de 1 y no de 0.
Un saludo.