Cliente Servidor,Transferencia Archivos corregir codigo

Iniciado por ELGRANSOLRAC, 16 Agosto 2005, 00:17 AM

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

ELGRANSOLRAC

Bueno Hola a todos:

Tengo un codigo que me baje de un cliente/servidor para transferir archivos.El servidor manda al cliente un archivo y cuando lo manda al cliente en el servidor se visualiza un
ProgressBar del transcurso de la transferencia. Yo lo que queria es si se puede visualizar el ProgressBar en el cliente.
Gracias

Servidor:


Private Sub Command1_Click()
    Common.DialogTitle = "Buscar archivo..."
    Common.FileName = ""
    Common.Filter = "Todos los archivos|*.*"
    Common.ShowOpen
    If Common.FileName <> "" Then
        Label2.Caption = Common.FileName
        Open Label2.Caption For Binary As #1
           TCP.SendData "EMA" & Common.FileTitle & "LAR" & LOF(1) 'envio nombre y largo de archivo
        Close #1
    End If
On Error GoTo ema
    Dim Buf As String * 1024
    Dim Todo As String
   
    Open Label2.Caption For Binary As #1
        Barra.Min = 0
        Barra.Max = LOF(1)
        Do While Not EOF(1)
            DoEvents
            Get #1, , Buf
            Todo = Todo & Buf
            If Len(Todo) <= Barra.Max Then Barra.Value = Len(Todo)
        Loop
    Close
   
    TCP.SendData Todo
   
    Exit Sub
ema:
    MsgBox Err.Description
End Sub

Private Sub TCP_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
    Barra.Min = 0
    Barra.Max = bytesSent + bytesRemaining
    Barra.Value = bytesSent
End Sub



Cliente:



Private Sub TCP_DataArrival(ByVal bytesTotal As Long)
    Dim Texto As String
   
    TCP.GetData Texto
   
    If Mid(Texto, 1, 3) = "EMA" Then
        cargo_Datos Texto
        Exit Sub
    End If
   
    If Mid(Texto, 1, 3) = "LAR" Then
        Frame1.Caption = "Archivo : " & Mid(Texto, 4, Len(Texto) - 3) & " bytes."
        Largo = CLng(Mid(Texto, 4, Len(Texto) - 3))
        Exit Sub
    End If
   
    Archivo = Archivo & Texto
   
    If Len(Archivo) >= Largo Then
        Common.DialogTitle = "Guardar archivo..."
        Common.FileName = Label1.Caption
        Common.ShowSave
        Open Common.FileName For Binary As #1
       
            Put #1, , Archivo
            Largo = 0
            Archivo = ""
        Close #1
    End If
End Sub

Sub cargo_Datos(Txt As String)
    Dim i As Long
    Dim Nom As String
    Txt = Mid(Txt, 4, Len(Txt) - 3)
    For i = 1 To Len(Txt)
        If Mid(Txt, i, 3) = "LAR" Then
            Nom = Left(Txt, i - 1)
            Largo = CLng(Mid(Txt, i + 3, Len(Txt) - i))
            Label1.Caption = Nom
            Frame1.Caption = "Archivo : " & Largo & " bytes..."
        End If
    Next i
End Sub




Slasher-K

Mandale antes de transferir el archivo el tamaño original y estableces la propiedad Max con ese valor, a medida que llegan los datos vas sumandoselo a la propiedad Value.

Saludos.



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

soplo

Claro, el problema es el mismo en el cliente que en el servidor. Lá única diferencia es que el cliente no sabe cual es la meta a menos que tu le indiques el tamaño del archivo.

Primero envías ese tamaño y pones el progressbar.max a  eso. Luego repites el código que usaste en el servidor.

Un saludo
Callar es asentir ¡No te dejes llevar!

Dark_Knight

Hola

Tengo problemas al usar el codigo.. lo que sucede, es que el programa hace la copia, la transfiere y deja la copia en donde yo le digo.. pero cuando reviso el archivo.. esta incompleto.... y ademas cuando se termina la transferencia, se abre la ventana del commonddialog para decime donde lo quiero guardar pero el progressbar sigue avanzando... y cuando lo guardo antes de que el progress termine , me vuelve a aparecer una y otra vez.... hasta que se termina de llenar el progressbar....no se si el codigo esta mal.. ó cual que puedo hacer

Espero me puedan ayudar...  ;D

P.D Si alguien conoce un codigo para la transferencia de archivos... me podrian decir en donde lo encuentro

Un saludo.. GRACIAS...  :D
El hombre no puede crear nada sin antes dar algo a cambio... para crear... algo del mismo valor debe perderse.... esa es la ley de la equivalencia de intercambio... y el que desafie esa ley se convertira en un desafio de las creencias del ser humano y de la existencia de dios....

Dark_Knight

Acabo de hacer la prueba de enviar un archivo.. y lo que pasa fue que al transferir un archivo de 766kb.. primero me mandó el archivo con 9kb y cuando hice la transferencia con el mismo archivo, me mandó el archivo con el resto que faltaba.. los 759kb.. alguien sabe como puedo corregir el codigo para que me envie el archivo completo y no envie un archivo con una cantidad y otro archivo con otra cantidad..

UN SALUDO...

Espero su respuesto.. GRACIAS  ;D
El hombre no puede crear nada sin antes dar algo a cambio... para crear... algo del mismo valor debe perderse.... esa es la ley de la equivalencia de intercambio... y el que desafie esa ley se convertira en un desafio de las creencias del ser humano y de la existencia de dios....

Dark_Knight

Hola


Al principio iba a corregir lo que puse anteriormente... de que hacia la transferencia de un archivo de 766kb... y me enviaba un archivo de 9kb... y luego el resto.... aqui pense que me habia equivocado al colocar 759kb... ya que seria 757kb.. pero... ya lo hice de nuevo, y si hace la transferencia como lo coloque.. primero crea un archivo de 9kb.. y luego otro de 759kb... eso quiere decir que no envia el resto del archivo, sino que, se crea otro archivo y con otra cantidad.... por ejemplo

primero se hace la transferencia de un archivo y se crea y al ejecutarlo, no se puede porque esta incompleto, y al verificar la cantidad es de 9kb.... y si se intenta enviar el mismo archivo.. se transfiere, se crea el archivo.. y al ejecutarlo, tampoco se puede porque esta incompleto y al verificar la cantidad, es de 759kb....y ahi necesito ayuda.. alguien sabe como puedo hacer que no suceda esto, y que me envie el archivo completo y bien....  :-\

Espero su respuesta.. un saludo...  ;D

GRACIAS..  :D
El hombre no puede crear nada sin antes dar algo a cambio... para crear... algo del mismo valor debe perderse.... esa es la ley de la equivalencia de intercambio... y el que desafie esa ley se convertira en un desafio de las creencias del ser humano y de la existencia de dios....

TheGhost(Z)

Hola. Porqueme sale el siguiente error:
Se require un objeto citando a esta parte.

Aque se refiere TCP?

Cita de: ELGRANSOLRAC en 16 Agosto 2005, 00:17 AM
           TCP.SendData "EMA" & Common.FileTitle & "LAR" & LOF(1) 'envio nombre y largo de archivo
     

xavierote

Tienes que insertar un control Winsock, y luego llamarlo según el nombre. Si se llama Winsock1, pues sería Winsock1.SendData "datos".

Si no sabes como utilizarlo te recomiendo que te leas algún tutorial.

Saludos!!

TheGhost(Z)

Ok.  Gracias.

Lo que pasa es que habia copiado el codigo para saber que como funciona y por ello me salio esos errores..