cuốn sách gpt4 ai đã làm

tcp - TCP 流中什么时候发生管道破裂?

In lại Tác giả: Hồ Xil 更新时间:2023-11-01 02:32:31 30 4
mua khóa gpt4 Nike

我正在尝试用 Rust 编写回显服务器。

use std::net::{TcpStream, TcpListener};
use std::io::prelude::*;

fn main() {
let listener = TcpListener::bind("0.0.0.0:8000").unwrap();
for stream in listener.incoming() {
let stream = stream.unwrap();
println!("A connection established");
handle_connection(stream);
}

}

fn handle_connection(mut stream: TcpStream) {
let mut buffer = [0; 512];

stream.read(&mut buffer).unwrap();

println!("Request: {}", String::from_utf8_lossy(&buffer[..]));
stream.write(&buffer[..]).unwrap();
stream.flush().unwrap();
}

sử dụng nc localhost 8000 的第一个请求按预期工作,但后续请求不是。我究竟做错了什么?服务器如何读取来自客户端的请求是否存在问题?虽然服务器端没有错误。

我通过在终端上输入数据来发送数据:

$ nc localhost 8000
hi
hi
hello
# no response
# on pressing enter
Ncat: Broken pipe.

câu trả lời hay nhất

当您写入另一端已关闭的流时,会出现“Broken pipe”消息。在您的示例中,您的 handle_connection 例程从客户端读取单个缓冲区,将其复制回客户端,然后返回,这将关闭流。当您像这样从终端运行 netcat 时,终端默认为行缓冲,因此您键入的每一行都将作为一次写入发送到服务器。

第一行被发送,由服务器读取,回显,然后服务器关闭连接。 Netcat 获取第二行,将其写入套接字,并获取“Broken pipe”,因为服务器已关闭连接。

如果您希望您的服务器读取多条消息,您需要让您的 handle_connection 例程循环,从流中读取直到它获得 EOF。

关于tcp - TCP 流中什么时候发生管道破裂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45668153/

30 4 0
Bài viết khuyến nghị: java - Netty writeAndFlush() 不完整
Bài viết khuyến nghị: java - 如何使用 JBoss Tattletale 工具?
Bài viết khuyến nghị: javascript - 使用 Yup 验证电话号码?
Bài viết khuyến nghị: tcp - TCP 连接可以保持打开多长时间?
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress