No tengo experiencia con winsock, pero despues de mas o menos descifrar tu código se me ocurre que quizá algún grupo de datos contiene los caracteres "LAR" o "EMA".
Quizá si añades al comienzo de los datos algo nuevo como "DAT" y lo usas para reconocer los datos consigas al menos evitar esa posibilidad.
Lo demás, si el nombre y longitud te aparecen bien con la funcion infoarchivo y el fichero que mandas tiene la longitud debida no veo donde puede fallar.
Con la longitud debida me refiero a que esta parte:
Código vb:
Ver originalOpen urlFile.Text 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
La cambiaria por un simple:
Código vb:
Ver originalOpen urlFile.Text For Binary As #1
Todo = Input(LOF(1), 1)
Close
porque los loops esos nunca me han gustado
Suerte
PD: Lo del "DAT" puede que no se pueda hacer si los datos vienen en bloques aunque los mandes de una sola vez, (ya digo que no tengo experiencia, aunque si algunos conocimientos en comunicaciones), de modo que el DAT no se puede poner, pero deberías poder saltar las comparaciones de "LAR" y "EMA" cuando se supone que solo van a venir datos.
Algo asi:
Código vb:
Ver originalPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Texto As String
Winsock1.GetData Texto
If Len(Archivo) >= Largo Then
If Mid(Texto, 1, 3) = "EMA" Then
infoarchivo (Texto)
Exit Sub
End If
Else
' Si Len(Archivo) < Longitud es que ya hay nombre y longitud y esperamos datos
Archivo = Archivo & Texto
If Len(Archivo) >= Largo Then
Common.DialogTitle = "Guardar archivo..."
Common.FileName = nameFile.Caption
Common.ShowSave
Open Common.FileName For Binary As #1
Put #1, , Archivo
Largo = 0
Archivo = ""
Close #1
End If
End If
End Sub