CLR: .Net / Mono / Boo / Otros CLR > C#

 Transferencia De Archivos Mediante Tcp

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa