繁体   English   中英

无法发送到我的 mpsc 无界通道,收到 Err SendError

Cannot send to my mpsc unbounded channel, getting a Err SendError

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试从我的 tcp 连接中获取输出值,然后简单地将其排队到我的无界通道中。

我似乎收到了一个发送错误(代码截图下方显示的错误)。

有什么我做错了吗?

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {

    #[derive(Debug)]
    struct Login {
        account: String,
        login: String,
        password: String
    }
    

    #[derive(Debug)]
    enum TcpCommand {
        Login,
        Incomding(String)
    }

    let (tx, mut rx) = mpsc::unbounded_channel::<TcpCommand>();

    tokio::spawn(async move {
        loop {
            let s = rx.blocking_recv();
            println!("received {:?}", s)
        }
    });


    let stream = TcpStream::connect("123.321.11.1:9800").await?;
    

    loop {
        let ready = stream.ready(Interest::READABLE | Interest::WRITABLE).await?;

        if ready.is_readable() {
            let mut data = vec![0; 1024];
            
            match stream.try_read(&mut data) {
                Ok(n) => {
                    println!("read {} bytes", n);
                    
                    match str::from_utf8(&data) {
                        Ok(v) => {
                        let res = tx.send(TcpCommand::Incomding(v[..n].to_string()));
                        println!("result res: {:?}", res);
                        println!("result: {}", v);
                        }
                        ,
                        Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
                    };                
                   

                }
                Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
                    continue;
                }
                Err(e) => {
                    //return Err(e.into());
                    println!("error: {}", e);
                }
            }

        }        
    }
}

我在尝试发送到我的频道时遇到错误:

 read 29 bytes result res: Err(SendError(Incomding("Please login...\r\n")) result: Please login...
问题暂未有回复.您可以查看右边的相关问题.
5 Golang:无法发送频道

为什么不在频道上发送并阻止执行? 如何使这个星座工作,以便我可以向MoneyDive()发送信号并继续执行? https://play.golang.org/p/1omlb7u6-A ...

7 std :: sync :: mpsc :: channel始终以相同顺序

无论我运行该程序多少次,它始终以相同的顺序显示数字: 在操场上编码。 输出为: 如果我重建项目,顺序将改变。 顺序是在编译时决定的吗? ...

2015-09-23 12:34:00 1 117   rust
8 Memory 通过 mpsc 通道发送项目的成本

我有两个线程读取来自两个源的消息的 stream,然后将它们转发到第三个接收器,在那里按顺序处理它们。 我担心复制数据的开销,因为我的消息位于每个线程的堆栈上,并且要通过mpsc移动它们,每个位都必须复制到接收器的堆栈中。 如果我尝试通过将消息放入Box来缓解这种情况,那么只有指针会被发送到新堆栈, ...

2020-07-19 09:43:16 0 31   rust
9 将数据从流转发到Tokio mpsc通道

我正在尝试创建一个异步Rust客户端,该客户端连接到一端的WebSocket服务器和另一端的蓝牙加密狗。 在这两者之间,会有一些逻辑来过滤消息。 我在WebSocket端使用rust-websocket的async模块。 我想隔离三个组件(websocket发送/接收,蓝牙发送/接 ...

10 从 tokio mpsc 频道获取最新消息

我每秒和每 2 秒分别从 2 个频道接收消息。 每次收到消息时都需要运行一个函数,但这个函数需要 5 秒。 我们填充result通道的速度比完成昂贵功能所需的时间要快。 以下代码的输出如下所示: 昂贵的函数总是使用队列中的下一条消息运行,而不是最新的,因此它落后了。 如何使用result通道 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM