Rust 如何通过futures:stream::stream发送bytes::bytes::bytes?
我正在尝试基于编写TCP服务器 当我尝试发送缓冲区时,编译器返回错误0277 我的代码:()Rust 如何通过futures:stream::stream发送bytes::bytes::bytes?,rust,future,rust-tokio,Rust,Future,Rust Tokio,我正在尝试基于编写TCP服务器 当我尝试发送缓冲区时,编译器返回错误0277 我的代码:() error[E0277]:绑定的特征“bytes::bytes::bytes:tokio::prelude::Stream”不满足 -->src/main.rs:25:28 | 25 | writer.send_all(&mut buf);//错误:E0277 |^^^^^^^^^特性“tokio::prelude::Stream”未为“bytes::bytes::bytes”实现` | =注意:由于“
error[E0277]:绑定的特征“bytes::bytes::bytes:tokio::prelude::Stream”不满足
-->src/main.rs:25:28
|
25 | writer.send_all(&mut buf);//错误:E0277
|^^^^^^^^^特性“tokio::prelude::Stream”未为“bytes::bytes::bytes”实现`
|
=注意:由于“&mut bytes::bytes::bytes::bytes”的“tokio::prelude::Stream”impl中的要求,因此需要`
我解决了这个问题
让我们。
extern crate tokio; // 0.1.22
use tokio::codec::{BytesCodec, Decoder};
use tokio::net::TcpListener;
use tokio::prelude::*;
use bytes::Bytes; // 0.4.12
fn main() {
let addr = "0.0.0.0:1502".parse().unwrap();
let mut socket = TcpListener::bind(&addr).unwrap();
let done = socket
.incoming()
.map_err(|e| println!("failed to accept socket; error = {:?}", e))
.for_each(move |socket| {
let framed = BytesCodec::new().framed(socket);
let (writer, reader) = framed.split();
let processor = reader
.for_each(move |bytes| {
println!("bytes: {:?}", bytes);
let mut data_to_send = [0 as u8; 1024];
let buf = Bytes::from(&data_to_send[..1024]);
writer.send_all(&mut buf);
Ok(())
})
.and_then(|()| Ok(()))
.or_else(|err| Err(err))
.then(|result| Ok(()));
tokio::spawn(processor)
});
tokio::run(done);
}
extern crate tokio; // 0.1.22
use tokio::codec::{BytesCodec, Decoder};
use tokio::net::TcpListener;
use tokio::prelude::*;
use bytes::Bytes; // 0.4.12
fn main() {
let addr = "0.0.0.0:1502".parse().unwrap();
let mut socket = TcpListener::bind(&addr).unwrap();
let done = socket
.incoming()
.map_err(|e| println!("failed to accept socket; error = {:?}", e))
.for_each(move |socket| {
let framed = BytesCodec::new().framed(socket);
let (mut writer, reader) = framed.split();
let processor = reader
.for_each(move |bytes| {
println!("bytes: {:?}", bytes);
let mut data_to_send = [0 as u8; 1024];
let buf = Bytes::from(&data_to_send[..1024]);
writer.start_send(buf).unwrap();
writer.poll_complete().unwrap();
Ok(())
})
.and_then(|()| Ok(()))
.or_else(|err| Err(err))
.then(|result| Ok(()));
tokio::spawn(processor)
});
tokio::run(done);
}