Movedlo a .NETSabía que iba a solucionarlo (con o sin ayuda....), en media horilla conseguí implementar lo que quería... El envío de archivos es asincronico, y se guardan con su respectivo nombre y formato. Los datos no llegan corruptos
Dejo las funciones de envío y de recibo (sólo en las que envío/proceso los datos) :
En el
Servidor:
Private Sub Enviar_Datos(ByVal Ruta_Archivo As String, ByVal Cliente As TcpClient, _
ByVal Nombre_Archivo As String)
If Cliente.Connected = True Then
Try
Dim Flujo_Red As NetworkStream = Cliente.GetStream()
Dim fileNameByte() As Byte = Encoding.ASCII.GetBytes(Nombre_Archivo)
Dim fileData() As Byte = My.Computer.FileSystem.ReadAllBytes(Ruta_Archivo)
Dim clientData() As Byte = New Byte(4 + fileNameByte.Length + fileData.Length) {}
Dim fileNameLen() As Byte = BitConverter.GetBytes(fileNameByte.Length)
fileNameLen.CopyTo(clientData, 0)
fileNameByte.CopyTo(clientData, 4)
fileData.CopyTo(clientData, 4 + fileNameByte.Length)
ListBox1.Items.Add(fileData.Length / 1024)
Flujo_Red.BeginWrite(clientData, 0, clientData.Length, _
New AsyncCallback(AddressOf Enviar_Datos_CallBack), Flujo_Red)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Else
Escuchar()
End If
En el
Cliente:
Private Sub RecibirDatos_CallBack(ByVal ar As IAsyncResult)
Try
Dim Buffer() As Byte = CType(ar.AsyncState, Byte())
Dim ns As NetworkStream = ClienteG.GetStream
ListBox1.Items.Add(Buffer.Length / 1024)
Dim Bytes_Leidos As Int32 = ns.EndRead(ar)
Dim fileNameLen As Byte = BitConverter.ToInt32(Buffer, 0)
Dim fileName As String = Encoding.ASCII.GetString(Buffer, 4, fileNameLen)
If Bytes_Leidos > 0 Then
Dim file As New FileStream
(CurDir() & "\" & fileName, FileMode.
Create, FileAccess.
Write) file.
Write(Buffer,
4 + fileNameLen, Bytes_Leidos
- 4 - fileNameLen
) Else
ReceiveDone.Set()
End If
Catch ex As Exception
End Try
End Sub
Saludos.