繁体   English   中英

C ++ Boost Asio TCP套接字读取旧数据

[英]C++ boost asio tcp socket reading old data

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

有什么方法可以清除缓冲区吗? 也许除了关闭旧套接字并创建新套接字以外,还有另一种方法吗?

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

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)));

我不清楚您的缓冲区的范围。 每个连接都需要一个缓冲区,用于读取和写入的每个缓冲区。 您还需要确保只要异步操作处于活动状态,它们就不会超出范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM