c++ boost asio tcp socket读取旧数据



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

我不清楚你的缓冲区是如何作用的。每个连接都需要一个缓冲区,一个用于读,一个用于写。您还需要确保只要异步操作处于活动状态,它们就保持在作用域中。

最新更新