TcpStream.read阻塞,如何解决呢

我是 rust 新手,最近在学习网络模块,遇到了这个阻塞问题。我看别人的代码都是直接调用 read () 方法,但是我的代码会被阻塞。现象如下:

  • 运行程序
  • 浏览器输入 127.0.0.1:4221
  • 控制台无输入,浏览器一直在转圈

最后发现是_stream.read () 再次进入时会阻塞,我想应该是 EOF, 但是如何处理 EOF 呢,它也不报错,也不返回 OK (0)?
代码如下:

代码已被折叠,点此展开

TcpStream.read阻塞,如何解决呢

最佳答案

data.push_str (std::str::from_utf8 (&buffer).unwrap ()) 这个后面你得判断你的 http 协议本次是不是读完整了 读完整了就 break 掉

1年前 评论
讨论数量: 4

data.push_str (std::str::from_utf8 (&buffer).unwrap ()) 这个后面你得判断你的 http 协议本次是不是读完整了 读完整了就 break 掉

1年前 评论
长日将尽

read 阻塞是因为没有数据可读,浏览器访问该服务器的时候并没有向服务器写入请求数据。如果用 TcpStream 再写一个客户端,向服务器写入一些数据,这个例子应该就能正常运行了。

1年前 评论

虽然没有数据,但是浏览器请求路径没有错,不应该阻塞,而是应该返回一个空的 response, 这个是理想效果。

1年前 评论

我参考网上的例子,判断所有内容读取完了就跳出循环:

代码已被折叠,点此展开

现在是可以的,不会阻塞,即使是 request body 是空的请求。

1年前 评论