CLR: .Net / Mono / Boo / Otros CLR > C#
Transferencia De Archivos Mediante Tcp
cqbotester:
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:
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 ---FileStream fs = new FileStream(textBox1.Text, FileMode.Open); BinaryReader lector = new BinaryReader(fs); byte[] bytes = new byte[(int)fs.Length]; try { lector.Read(bytes, 0, bytes.Length); base64 = Convert.ToBase64String(bytes); } catch (IOException ex) { MessageBox.Show(ex.Message); } //Ok... a escribir :) string sImagenTemporal = Application.StartupPath + "\\convertida.jpg"; //Nombre y formato que queramos FileStream fs2 = new FileStream(sImagenTemporal, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs2); try { bytes = Convert.FromBase64String(base64); bw.Write(bytes); } finally // Voilà! { fs.Close(); fs2.Close(); }
cqbotester:
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:
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:
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 ---string temp= Directory.GetCurrentDirectory();nombresArchivos= Directory.GetFiles(temp);
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.
Navegación
[#] Página Siguiente
Ir a la versión completa