gpt4 book ai didi

c++ - 在 boost::asio::write 之后刷新 TCP

转载 作者:行者123 更新时间:2023-11-28 01:34:56 25 4
gpt4 key购买 nike

我有一个用 boost:.asio 编写的简单服务器

boost::asio::io_context io_context;
tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), port));
tcp::socket socket(io_context);
acceptor.accept(socket);
boost::asio::ip::tcp::no_delay option(true);
socket.set_option(option);

for(int i = 0; i < 10; ++i) {
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer("Hello, World!"), ignored_error);
}

我现在的问题是所有 10 行都一次发送。但我想要 10 条单独的消息。我认为 boost::asio::ip::tcp::no_delay 会有所帮助。但事实并非如此。

我测试的 nodejs 客户端看起来是这样的:

import * as net from 'net';

const client = new net.Socket();

client.connect(3232, 'localhost', () => {
console.log('Connected');
});

client.on('data', data => {
console.log(`Received: ${data}`);
});


client.on('close', () => {
console.log('Connection closed');
});

client.on('data', ...) 在这里只调用了一次。

有谁知道写入后如何“刷新”?

或者这是nodejs客户端实现的错误?

最佳答案

TCP 在概念上是一种流协议(protocol),没有数据报的概念(与 UDP 不同)。一旦数据被添加到 TCP 缓冲区,它将以尽可能少的 IP 数据包发送。同样在另一端,所有传入的数据包边界信息都丢失了。所有传入数据都合并到一个缓冲区中。所以如果你需要框架,你需要在应用程序级别实现它。

关于c++ - 在 boost::asio::write 之后刷新 TCP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49722347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com