[英]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.