Buenas a aquellos que leais el post,
he decidido postear este tema en este foro ya que por el momento no trataré con ningun lenguaje de programación. Lo que pido al poder ser es CONSEJO ya que llevo un buen rato buscando.
El problema es el siguiente:
tengo una aplicación Cliente/Servidor en la cual se producen envios de aplicaciones y son recibidas por el cliente directamente. Claro que al guardar la aplicación en el lado del Cliente tengo que introducir el nombre del ejecutable resultante manualmente en el código.
Ya probé enviando desde el Servidor un paquete con el nombre del archivo y los datos de la aplicación a enviar, después en el Cliente obtuve el nombre del archivo, pero el archivo estaba corrupto :/
Mi pregunta es, ¿Cómo obtener en el lado del Cliente el nombre del archivo recibido?
Agradezco cualquier ayuda..
Saludos.
Animaros! seguramente más de alguno de vosotros haya codeado una aplicación Client/Server con lo que pido, solo os pido un consejillo nada más :P
Saludos.
No me gustaría tener que empezar a matar gatitos... >:D
Vamos :P ¿ni una simple recomendación? será que no me he buscado la vida lo suficiente por la red... ¬¬
No os pido el code, si no una breve explicación con la que poder implementar lo que digais.
Saludos.
Movedlo a .NET
Sabí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)
file.Close()
Else
ReceiveDone.Set()
End If
Catch ex As Exception
End Try
End Sub
Saludos.