Ok, voy a seguir en castellano después usted lo traduce
yo e solucionado eso de la siguiente manera
No envíe el archivo completo, envielo por trozos de 1 kb aproximadamente, cuando se dispara el evento SendComplete active un pulso de un timer para no crear un bucle y así poder formar algo parecido a un Multithreard.
un ejemplo que no lo he probado pero es para que usted tenga una idea de como funciona, es mas lento pero puede enviar varios archivos a la vez
Esto iria dentro de un modulo clase que representa una conexión con un modulo clase de socket y un modulo clase de un timer.
Const SIZE_OF_BUFFER As Long = 1024
Dim LenData As Long
Dim bData() As Byte
Dim bBuffer() As Byte
Dim lChuncks As Long
Dim lReminder As Long
Dim lPos As Long
Dim SendFileComplete As Boolean
Private Sub SendFile(ByVal FileName As String)
Dim FF As Integer
FF = FreeFile
Open FileName For Binary As #FF
ReDim bData(LOF(FF))
Get #FF, , bData
Close #FF
LenData = UBound(bData)
ReDim bBuffer(SIZE_OF_BUFFER)
lChuncks = LenData \ SIZE_OF_BUFFER
lReminder = LenData - lChuncks * SIZE_OF_BUFFER
SendFileComplete = False
Call SendSegment
End Sub
Private Sub SendSegment()
If SendFileComplete = True Then Exit Sub
If lPos <= lChuncks Then
CopyMemory bBuffer(0), bData(lPos), SIZE_OF_BUFFER
lPos = lPos + SIZE_OF_BUFFER
SendFileComplete = False
If cSocket.State = 7 Then
cSocket.SendData bBuffer
End If
Else
If lReminder > 0 Then
ReDim bBuffer(lReminder)
CopyMemory bBuffer(0), bData(lPos), lReminder
SendFileComplete = True
If cSocket.State = 7 Then
cSocket.SendData bBuffer
End If
Else
SendFileComplete = True
End If
End If
End Sub
Private Sub cSocket_SendComplete()
cTimer.StartTimer 1
End Sub
Private Sub cTimer_Timer()
cTimer.StopTimer
Call SendSegment
End Sub