tagspace tag files easy and windows vb6 network-programming wireless intermittent

tag - windows easy transfer windows 10



Copiar archivos a través de una conexión de red intermitente (8)

Estoy buscando una forma robusta de copiar archivos a través de un recurso compartido de red de Windows que sea tolerante a la conectividad intermitente. La aplicación se usa a menudo en estaciones de trabajo inalámbricas y móviles en hospitales grandes, y asumo que la conectividad puede perderse momentáneamente o por varios minutos a la vez. Los archivos involucrados son típicamente de aproximadamente 200 KB - 500 KB de tamaño. La aplicación está escrita en VB6 (ugh), pero con frecuencia terminamos usando llamadas a Windows DLL.

¡Gracias!


¿Qué le parece simplemente enviar un hash después o antes de enviar el archivo y compararlo con el archivo que recibió? Eso debería al menos asegurarse de tener un archivo correcto.

Si quiere hacer todo lo posible, puede hacer el mismo proceso, pero para partes pequeñas del archivo. Luego, cuando tenga todas las piezas, únase a ellas en el extremo receptor.


Estoy de acuerdo con Robocopy como solución ... por eso la utilidad se llama "Copia de archivos robustos"

He usado Robocopy para esto con excelentes resultados. Por defecto, volverá a intentarlo cada 30 segundos hasta que el archivo se cruce.

Y de forma predeterminada, un millón de reintentos. Eso debería ser suficiente para su conexión intermitente.

También realiza transferencias reiniciables e incluso puede acelerar las transferencias con un espacio entre paquetes, suponiendo que no desea usar todo el ancho de banda, ya que otros programas usan la misma conexión (/ conmutador IPG).


He usado Robocopy para esto con excelentes resultados. Por defecto, volverá a intentarlo cada 30 segundos hasta que el archivo se cruce.


Hm, parece que rsync lo hace, y no necesita server / daemon / install, pensé que sí, solo $ rsync src dst.


Intente usar BITS (Servicio de transferencia inteligente en segundo plano). Es la infraestructura que usa Windows Update, es accesible a través de la API de Win32 y está específicamente diseñada para solucionar esto.

Usualmente se usa para actualizaciones de aplicaciones, pero debería funcionar bien en cualquier situación de movimiento de archivos.

http://www.codeproject.com/KB/IP/bitsman.aspx


No estoy seguro de cuál es tu problema real, así que arrojaré algunos pensamientos.

  • ¿Desea copias reiniciables (con tamaños de archivo tan pequeños, que no parece ser tan grande)? Si es así, mira CopyFileEx con COPYFILERESTARTABLE
  • ¿Quieres copias verificables? Parece que ya lo tienes al verificar los hashes.
  • ¿Quieres un mejor rendimiento? Va a ser difícil, ya que parece que no se puede ejecutar nada en el servidor. De lo contrario, TransmitFile puede ayudar.
  • ¿Solo quieres un fuego y olvidarte de la operación? Supongo que bombardear con robocopy, o TeraCopy o algo funcionaría, pero me parece un poco raro.
  • ¿Quieres saber cuándo regresa la red? IsNetworkAlive tiene su respuesta.

Basado en lo que sé hasta ahora, creo que el siguiente pseudocódigo sería mi enfoque:

sourceFile = Compress("*.*"); destFile = "X:/files.zip"; int copyFlags = COPYFILEFAILIFEXISTS | COPYFILERESTARTABLE; while (CopyFileEx(sourceFile, destFile, null, null, false, copyFlags) == 0) { do { // optionally, increment a failed counter to break out at some point Sleep(1000); while (!IsNetworkAlive(NETWORKALIVELAN)); }

Comprimir primero los archivos le ahorra el seguimiento de los archivos que ha copiado con éxito y que debe reiniciar. También debería hacer que la copia sea más rápida (tamaño de archivo total más pequeño y tamaño de archivo único más grande), a expensas de cierta potencia de CPU en ambos lados. Un archivo por lotes simple puede descomprimirlo en el lado del servidor.



SMS si está disponible funciona.