• Domingo 22 de Diciembre de 2024, 14:36

Autor Tema:  Transferencia De Archivos Mediante Tcp  (Leído 5979 veces)

cqbotester

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Transferencia De Archivos Mediante Tcp
« en: Lunes 13 de Noviembre de 2006, 02:05 »
0
Hola a todos, mi duda es la siguiente:

Estoy creando una aplicación pequeña (cliente/servidor) en la cual la aplicación cliente se conecta y puede ver algunos archivos que le ofrece el servidor para descargar. Todo esto usando Sockets, TcpListener, TcpClient, etc.

Lo que he hecho hasta ahora es establecer la conexión y puedo enviar strings de un lado a otro. Mi pregunta es como enviar archivos completos (un mp3,un doc,etc). No creo que se manden igual que los strings o si? En qué métodos o clases tengo que investigar más para hacer eso?

Desde ya muchas gracias por alguna ayuda.
Saludos

Piet

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Transferencia De Archivos Mediante Tcp
« Respuesta #1 en: Lunes 13 de Noviembre de 2006, 21:09 »
0
Tomas el archivo y con un binreader lees los bytes del archivo, y envias estos mediante un socket, el cliente los recibe, y luego crea un archivo con los bytes recibidos y listo.
Acá te dejo un codigo que lee los bytes de un archivo y los convierte en un archivo .jpg, no es lo que necesitas, pero es para que se entienda como leer los bytes y escribirlos en otro archivo.
La parte de codificacion en base64 es inecesaria. Tu solo debes hacer que se manden los bytes por un socket:
Código: Text
  1. FileStream fs = new FileStream(textBox1.Text, FileMode.Open);
  2.            
  3.             BinaryReader lector = new BinaryReader(fs);
  4.             byte[] bytes = new byte[(int)fs.Length];
  5.  
  6.             try
  7.             {
  8.                 lector.Read(bytes, 0, bytes.Length);
  9.                 base64 = Convert.ToBase64String(bytes);
  10.             }
  11.             catch (IOException ex)
  12.             {
  13.                 MessageBox.Show(ex.Message);
  14.             }
  15.             //Ok... a escribir :)
  16.             string sImagenTemporal = Application.StartupPath + "\\convertida.jpg"; //Nombre y formato que queramos
  17.             FileStream fs2 = new FileStream(sImagenTemporal, FileMode.Create);
  18.             BinaryWriter bw = new BinaryWriter(fs2);
  19.  
  20.             try
  21.             {
  22.                 bytes = Convert.FromBase64String(base64);
  23.                 bw.Write(bytes);
  24.             }
  25.              finally  // Voilà!
  26.             {
  27.                 fs.Close();
  28.                 fs2.Close();
  29.             }
  30.  

cqbotester

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Transferencia De Archivos Mediante Tcp
« Respuesta #2 en: Jueves 16 de Noviembre de 2006, 03:56 »
0
Hola de nuevo, Muchas Gracias Piet por tu pronta respuesta. Probé lo que me indicaste y se pudo hacer la transferencia de archivos, sin ningún problema. Vale por tu ayuda. Nos vemos.

Piet

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Transferencia De Archivos Mediante Tcp
« Respuesta #3 en: Jueves 16 de Noviembre de 2006, 21:44 »
0
Que bueno que te haya servido, me interesa saber algo de tu proyecto, como haces para listarle los archivos al cliente? Lo haces mediante ls para unix o dir en windows desde la consola u otro método?
Me parece muy bueno tu proyecto, suerte.

cqbotester

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Transferencia De Archivos Mediante Tcp
« Respuesta #4 en: Jueves 23 de Noviembre de 2006, 03:25 »
0
Hola Piet, te cuento que el proyecto que estoy desarrollando es para una asignatura de Comunicaciones de Datos y Redes. En vista de que estoy aprendiendo con el Visual C# me decidí hacerlo con las clases que proporciona para el manejo de Sockets. Como te contaba no es la gran cosa, solo uso unas forms para el cliente y el servidor y en cada uno de estos la interfaz tiene un componente listbox. En el servidor obtengo los archivos del directorio actual y los agrego al listbox.

Código: Text
  1. string temp= Directory.GetCurrentDirectory();
  2. nombresArchivos= Directory.GetFiles(temp);
  3.  
  4.  
     

Esos nombres de archivos se los paso al cliente para llenar su listbox y desde acá el cliente selecciona el archivo que desea descargar. La transferencia se realiza como tú me dijiste. Eso es todo. De nuevo gracias por la ayuda.

Piet

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Transferencia De Archivos Mediante Tcp
« Respuesta #5 en: Jueves 23 de Noviembre de 2006, 16:10 »
0
Justo lo que queria saber, muchas gracias :).