小编Chi*_*ico的帖子

从具有Read :: read_to_string的TcpStream读取将挂起,直到远程端关闭连接

我正在尝试在Rust中实现Haskell IRC bot教程,并且在连接后读取服务器发送给我的内容时遇到了一些困难.似乎发生的事情是我连接,从服务器读取~5 KB,然后大约240秒后,所有内容立即被转储,而不是逐行读取.连接由ping超时关闭,最终应该发生,因为我还没有ping-pong函数来回复.

这是我到目前为止所拥有的:

use std::io::{Read, Write};
use std::net::TcpStream;

fn main() {
    let mut stream = TcpStream::connect("irc.freenode.org:6667").unwrap();

    let _ = stream.write(b"NICK G-SERUFU\r\n");
    let _ = stream.write(b"USER G-SERUFU 0 * :brobot\r\n");
    let _ = stream.write(b"JOIN #tutbot-testing\r\n");

    let mut line = String::with_capacity(512);
    loop {
        let result = stream.read_to_string(&mut line);
        match result {
            Ok(n) => println!("Received {} bytes", n),
            _ => {}
        }
        line.clear();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我修改循环a以使用数组而不是字符串时,我立即得到我期望的输出:

let mut line;
loop {
    line = [0; 512];
    let result = stream.read(&mut …
Run Code Online (Sandbox Code Playgroud)

io network-programming rust

15
推荐指数
1
解决办法
5677
查看次数

标签 统计

io ×1

network-programming ×1

rust ×1