C ++提升asio tcp socket读取旧数据

时间:2011-04-20 12:50:35

标签: c++ tcp boost-asio

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

1 个答案:

答案 0 :(得分:1)

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