我似乎在与std::io::TcpStream做斗争.实际上,我正在try 打开与另一个系统的TCP连接,但下面的代码正好模拟了这个问题.
我有一个Tcp服务器,它在打开时将"Hello World"写入Tcp流,然后循环以保持连接打开.
fn main() {
let listener = io::TcpListener::bind("127.0.0.1", 8080);
let mut acceptor = listener.listen();
for stream in acceptor.incoming() {
match stream {
Err(_) => { /* connection failed */ }
Ok(stream) => spawn(proc() {
handle(stream);
})
}
}
drop(acceptor);
}
fn handle(mut stream: io::TcpStream) {
stream.write(b"Hello Connection");
loop {}
}
客户端所做的只是try 从连接中读取一个字节并打印它.
fn main() {
let mut socket = io::TcpStream::connect("127.0.0.1", 8080).unwrap();
loop {
match socket.read_byte() {
Ok(i) => print!("{}", i),
Err(e) => {
println!("Error: {}", e);
break
}
}
}
}
现在的问题是,在我关闭服务器或关闭TCP连接之前,我的客户端在读取时一直处于阻塞状态.这不是我想要的,我需要打开TCP连接很长一段时间,并在客户端和服务器之间来回发送消息.我在这里误解了什么?我与我正在通信的真实系统有着完全相同的问题——我只有在断开连接后才能解锁.