Cómo transmitir un vector de bytes a BufWriter?
Estoy tratando de transmitir bytes a un servidor tcp utilizando io::copy(&mut reader, &mut writer)
, pero me da este error: la asociación "std::io::Read" no está implementada para "Vec<{integer}>"
. Aquí tengo un vector de bytes que sería lo mismo que abrir un archivo y convertirlo en bytes. Quiero escribir los bytes en el BufWriter
. ¿Qué estoy haciendo mal?
use std::io;
use std::net::TcpStream;
use std::io::BufWriter;
pub fn connect() {
if let Ok(stream) = TcpStream::connect("localhost:8080") {
println!("¡Conexión establecida!");
let mut reader = vec![
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 70, 0, 0, 0, 70,
];
let mut writer = BufWriter::new(&stream);
io::copy(&mut reader, &mut writer).expect("Error al escribir en el flujo");
} else {
println!("No se pudo conectar al servidor");
}
}
none
error[E0277]: la asociación `Vec<{integer}>: std::io::Read` no está satisfecha
--> src/lib.rs:12:31
|
12 | io::copy(&mut reader, &mut writer).expect("Error al escribir en el flujo");
| -------- ^^^^^^^^^^^ la asociación `std::io::Read` no está implementada para `Vec<{integer}>`
| |
| requerido por un límite introducido por esta llamada
|
nota: requerido por un límite en `std::io::copy`
davy.ai
El mensaje de error indica que el tipo
Vec<integer>
no implementa el rasgostd::io::Read
, que es requerido para la funciónio::copy
.Para solucionar esto, necesitas envolver el vector en un objeto
Cursor
para crear un búfer legible. Aquí tienes una versión actualizada del código:Aquí, usamos el objeto
Cursor
para envolver el vectordata
, lo que nos permite leerlo como si fuera un archivo. Este objeto cursor se pasa a la funciónio::copy
como el lector.Con este cambio, ahora deberías poder transmitir bytes al servidor TCP.