[Sockets] Obtener Nombre del archivo

Iniciado por kub0x, 11 Abril 2012, 03:29 AM

0 Miembros y 3 Visitantes están viendo este tema.

kub0x

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.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


kub0x

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.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


kub0x

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.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


kub0x

#3
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:

Código (VB.NET) [Seleccionar]

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:

Código (VB.NET) [Seleccionar]

   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.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate