Transferencia de archivos

Iniciado por leoleoleo17, 10 Diciembre 2005, 23:02 PM

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

leoleoleo17

hola soy nuevo en el foro.
estaba necesitando realizar un codigo de transferencia de archivos utiizando el control winsock.
estuve viendo un codigo aqui en el foro q me ayudo bastante este codigo lo he realizado en base a ese pero no lo puedo hacer andar...
conecta, pero para mandar manda cualquier cosa, varios archivos, no se cual es el problema, creo q es el orden en que escribe el open binary segun el orden en que llegan el archivo.
les agradeceria si se pudieran fijar cual es el error ya q yo no lo puedo encontrar.

este es el codigo del cliente


Option Explicit
Dim b1 As Boolean
Dim dire As String
Dim nombre As String

Private Sub MCLIENTE_Click()
Form3.Show
Me.Hide
End Sub

Private Sub DESCONECTAR_Click()
TCP.Close
End Sub

Private Sub Enviar_Click()
If dire <> "" Then
Dim buf As String * 1024
Dim todo As String
Open dire For Binary As #1
On Error GoTo juaz
    TCP.SendData "NOM" & nombre
    TCP.SendData "LAR" & LOF(1)
    Barra.Min = 0
    Barra.Max = LOF(1)
    Do While Not EOF(1)
        Get #1, , buf
        todo = todo & buf
    Loop
Close #1
TCP.SendData todo
End If
Exit Sub
juaz:
    MsgBox Err.Description
End Sub

Private Sub Examinar_Click()
Common.ShowOpen
Direccion.Text = Common.FileName
nombre = Common.FileTitle
dire = Common.FileName
End Sub

Private Sub CONECTAR_Click()
If b1 = True Then
    Dim ip1 As String
    TCP.RemotePort = Val(PTXT.Text)
    ip1 = IPTXT.Text
    TCP.RemoteHost = ip1
    TCP.Connect
    b1 = False
    CONECTAR.Caption = "Cerrar conectando..."
Else
    b1 = True
    TCP.Close
    CONECTAR.Caption = "Conectar"
End If
End Sub

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

Private Sub Timer1_Timer()
Select Case TCP.State
Case 0
    Label3.Caption = "Estado de la conexión: Desconectado"
    DESCONECTAR.Enabled = False
    CONECTAR.Enabled = True
Case 6
    Label3.Caption = "Estado de la conexión: Conectando..."
Case 7
    Label3.Caption = "Estado de la conexión: Conectado"
    DESCONECTAR.Enabled = True
    CONECTAR.Enabled = False
End Select
   
End Sub





este es el codigo del servidor


Option Explicit
Dim b As Boolean
Private Sub ESCUCHAR_Click()
If b = True Then
TCP1.Listen
ESCUCHAR.Caption = "Dejar de escuchar"
b = False
Else
TCP1.Close
ESCUCHAR.Caption = "Escuchar"
b = True
End If
End Sub

Private Sub Form_Load()
b = True
End Sub

Private Sub MSERVIDOR_Click()
Form1.Show
Me.Hide
End Sub

Private Sub TCP1_ConnectionRequest(ByVal requestID As Long)
If TCP1.State <> sckClosed Then
    TCP1.Close
End If
TCP1.Accept requestID
End Sub

Private Sub TCP1_DataArrival(ByVal bytesTotal As Long)
Dim recibido As String
Dim fnombre As String
Dim flargo As Long
Dim archivo As String
TCP1.GetData recibido
Select Case Mid(recibido, 1, 3)
Case "NOM" Or "nom"
    fnombre = Mid(recibido, 4, (Len(recibido) - 3))
Case "LAR" Or "lar"
    flargo = CLng(Mid(recibido, 4, (Len(recibido) - 3)))
Case Else
    archivo = recibido
End Select
If Len(archivo) >= flargo Then
    Common1.FileTitle = fnombre
    Common1.ShowSave
    Open Common1.FileName For Binary As #1
        Put #1, , archivo
        flargo = 0
        fnombre = 0
        archivo = ""
    Close #1
End If
End Sub





desde ya les agradezco su ayuda

ZEALOT

te doy un consejo: primero divide el archivo en "X" bytes no tan grande los bloques, luego envias la 1er parte y esperas la notificacion de tu cliente que te diga:"Llegó la parte X del archivo" y asi lo armas en un buen orden.
la otra es crear un buffer del tamaño del archivo y cada parte con su numero de posicion en el archivo y asi se va armando el buffer sin necesidad de que llegue en orden, y al final vuelcas todo el bufer a un archivo y listo.

saludos bye  ;D

Kizar

Un buen tamaño para el bufer es 5000 bytes.

Y recalcar k es muy importante que mande la parte siguiente cuando aya recibido la anterior.

Salu2