Transferencia de archivos, AYUDA

Iniciado por Kizar, 11 Julio 2005, 00:34 AM

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

Kizar

Hola a todos, pues el problema es que en el trayano que estoy haciendo al enviar los archivos no les envia enteros, solo envia un poco del principio, aqui os dejo el codigo a ver si alguno encontrais el problema, por que llo llevo mas de una semana y no lo e encontrao.

Nota : "vbParseData" lo utilizo para partir los archivos a la llegada seria igual que lo que usais muchos "|" .


Dim i As Long
Dim Arch As String
Dim Buffer as string
Arch = "C:\stub.log"
Buffer = Space$(25000)
   
    Open Arch For Binary Access Read As #1
     
    For i = 1 To FileLen(Arch) / 25000 'hacemos la division de las veces que tendra que leer y enviar
    Get #1, , Buffer 'leemos
    Winsock_server.SendData "archi" & vbParseData & Buffer
    DoEvents
   
    If FileLen(Arch) - Loc(1) <= 25000 Then 'como el for no utiliza los  decimales enviamos los restos
    Buffer = Space$(FileLen(Arch) - Loc(1)) 'redimensianamos la variable con el num de bites que faltan
    Get #1, , Buffer 'leemos
    Winsock_server.SendData "archi" & vbParseData & Buffer
    DoEvents
    End If
    Next i

    Winsock_server.SendData "fin"
    Close #1


Salu2

maxnet


creo que 25000 es mucho prueba con 8000 o menos

o puede ser que lo envias muy rapido
quita doevents y create una pausa de uno milisegundos

saludos!!!



Slasher-K

El problema no es tu RAM sino que el ancho de banda no soporta tanto, cuando se envían datagramas por la web no deben ser muy grandes porque al pasar por tantos servidores los datos se podrían perder o peor, pueden llegar corrompidos.

Primero intenta envíar menos cantidad de datos, si no funciona se buscará otra solución.

Pero igualmente esa forma de leer el archivo es media inestable, te dejo una alternativa.


Option Explicit

Private Type FileInfo
  Filename      As String
  FileSize      As Long
  TotalPieces   As Long
  BytesPerPiece As Long
  ByteRemaining As Long
End Type

Private Function ParseFile(Filename As String, BytesPerPiece As Long) As FileInfo
  With ParseFile
    .Filename = Filename
    .FileSize = FileLen(Filename)
    .TotalPieces = .FileSize \ BytesPerPiece
    .BytesPerPiece = BytesPerPiece
    .ByteRemaining = .FileSize Mod .ByteRemaining
  End With
End Function

Private Function CropFile(FileSpec As FileInfo) As Single
        Dim hFile%, snTime!
        Dim sData$, i&

  snTime = Timer
 
  With FileSpec
    hFile = FreeFile
   
    Open .Filename For Binary Lock Read Write As #hFile
   
    sData = String$(.BytesPerPiece, 0)
   
    For i = 1 To .TotalPieces
      If i < .TotalPieces Then
        Get #hFile, , sData
      Else
        sData = String$(.ByteRemaining, 0)
       
        Get #hFile, , sData
      End If
     
      'Luego acá se enviarían los datos.
      '
    Next
  End With
End Function


En resumen es lo mismo pero un poco más estructurado. Y si usas la API es dos veces más rápido.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

Slasher-K

Intenta hacer una pausa entre cada llamada a Send. Por ejemplo con el siguiente código (incorporalo al procedimiento).


      Dim snTime!

  snTime = Timer

  Do While (Time - snTime) < .25
   'Espera 0.25 segundos.
  Loop

  Call Winsock_server.SendData("archi" & vbParseData & Buffer)


Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

Slasher-K

Ah me olvidé de ese detalle en el code que puse antes ;D. La forma de solucionar eso sería asi:


Tam = 1024
Trozos = FileLen(Arch) / Tam
Falta = FileLen(Arch) Mod Falta

If Falta > 0 Then Trozos = Trozos + 1


Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

Slasher-K

La instrucción Mod devuelve el resto de una división, por eso la uso para obtener lo que falta del archivo.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

sch3m4

SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..

Thaorius

Acabo de mirar el enlace y no veo fallas evidentes. Comproba que el programa se conecta.

Saludos
Si te sirvio mi aporte, encontrarás más en www.teoxstudios.com. Gracias!
Buscando un buen hosting? Click aquí

sch3m4

SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..

-Xenon-


lo que necesitas lo esplico en la primera pagina de este hilo http://foro.elhacker.net/index.php/topic,57545.0.html

algo rustico, pero funciona 100%

no tiene perdida, en la primera pagina, el 4 post que puse, si no me equivoco!

espero te sirva, suerte
Cuando el ingenio se queda pequeño,
No basta con poner empeño,
Solo el talento consigue el diseño