C# - Problema en transferencia de datos con Sockets

Iniciado por _LooSeR_, 12 Marzo 2010, 21:42 PM

0 Miembros y 1 Visitante están viendo este tema.

raul338

Claro, seria algo como

NetworkStreamWriter.Write(BinaryStreamReader.Read()) :xD

[D4N93R]


_LooSeR_

#12
Ok, ya lo tengo hecho. Al final lo he hecho algo más sencillo y no con tantos Streams como dije xD

Al pasar la longitud como un string me volvia a dar error algunas veces, con que el formato no era adecuado para luego ser convertido a "int".

De modo que lo he pasado como 4 bytes, para un int32

Por si a alguien le sirve dejo aqui como lo he hecho:

Cliente              
               
Código (csharp) [Seleccionar]
               //Leemos el contenido del fichero
               byte[] contenido = File.ReadAllBytes(ruta);

               //Obtenemos la longitud en bytes del fichero leido
               byte[] longitud = BitConverter.GetBytes(contenido.Length);

               //Pasamos la cantidad de bytes del fichero
               NWSServer.Write(longitud, 0, longitud.Length);
               SWServer.Flush();
   
               //Pasamos el contenido del fichero
               NWSServer.Write(contenido, 0, contenido.Length);
               NWSServer.Flush();



Servidor
               
Código (csharp) [Seleccionar]
               //Leemos la longitud del fichero que estará en un int32bits (4bytes)
               byte[] longitud = new byte[4];

               NWSCliente.Read(longitud, 0, longitud.Length);

               int size = BitConverter.ToInt32(longitud, 0);


               //Reservamos el espacio requerido
               byte[] contenido = new byte[size];

               //Leemos el contenido del fichero
               NWSCliente.Read(contenido, 0, size);

               //Creamos el fichero
               FileStream fs = new FileStream(ruta_destino, FileMode.Create, FileAccess.Write);

               //Escribimos los datos en él
               fs.Write(contenido, 0, size);
                fs.Close();


Saludos!

[D4N93R]

Que bueno!, así es...

Una pequeña crítica constructiva:

- Que NWSServer.Write() nada más pida el byte array, en ese método dentro es que vas a programar para que sea desde 0 hasta el total.

- Deja esa sobrecarga actual también.

- Hazte otra más para enviar Strings.

Quedaría algo asi.

NWSServer.Write(byte[]);
NWSServer.Write(byte[], int, int);
NWSServer.Write(string);


Un saludo!

katupeku

Buenas, he estado dando muchas vueltas y leyendo bastante sobre socket, pero la verdad es que todavia hay cosas que se me escapan, logre hacer un programa que envia archivos pequeños de menos de unos 3 o 4 Mb, si me pudieses ayudar con el tema de el directorio, te lo agradeceria.