gpt4 book ai didi

C++ 提升 asio tcp 套接字读取旧数据

转载 作者:行者123 更新时间:2023-11-28 08:21:20 36 4
gpt4 key购买 nike

我是 Boost asio 新手。我有一个 tcp 服务器客户端对程序正在运行,但是当我运行一个新客户端时,该客户端也会获取所有旧的写入。我正在使用 async_read/async_write 读/写。所以服务器和客户端可能已经运行了一段时间并来回发送了 100~ 个数据包。当我打开第二个客户端并在其上接收时,我收到了所有 100 个旧服务器发送的数据包! “localhost”用于 ip_address。

有什么办法可以清除缓冲区之类的吗?也许除了关闭旧套接字并创建新套接字之外,还有其他方法吗?

读/写调用(未按此顺序使用,只是从我使用它们的地方复制了两个调用):

boost::array<char, 1024> buf;
boost::array<char, 1024> rbuf;
boost::asio::async_write(socket_,
boost::asio::buffer(buf.c_array(),
buf.size()),strand_.wrap(boost::bind(&async_tcp_client::handle_send_msg,
this,boost::asio::placeholders::error)));

boost::asio::async_read(socket_, boost::asio::buffer(rbuf.c_array(), rbuf.size()),
strand_.wrap(boost::bind(&async_tcp_client::handle_read,
this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));

最佳答案

我不清楚您的缓冲区是如何划分范围的。每个连接都需要一个缓冲区,读取和写入各一个。您还需要确保只要异步操作处于事件状态,它们就在范围内。

关于C++ 提升 asio tcp 套接字读取旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5730598/

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