Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;boost asio tcp套接字读取旧数据_C++_Tcp_Boost Asio - Fatal编程技术网

C++ C++;boost asio tcp套接字读取旧数据

C++ C++;boost asio tcp套接字读取旧数据,c++,tcp,boost-asio,C++,Tcp,Boost Asio,我是新来的。我有一个tcp服务器-客户机对程序正在运行,但当我运行一个新客户机时,该客户机也会接收所有旧的写操作。我正在用异步读/异步写进行读/写。因此,服务器和客户端可能已经运行了一段时间,并来回发送了100个数据包。当我打开第二个客户端并在其上接收时,我将接收所有100个旧服务器发送的数据包!“localhost”用于ip_地址 有没有办法清除缓冲区之类的?除了关闭旧套接字并创建新套接字之外,还有其他方法吗 读/写调用(未按此顺序使用,只是从我使用它们的地方复制了两个调用): boost::

我是新来的。我有一个tcp服务器-客户机对程序正在运行,但当我运行一个新客户机时,该客户机也会接收所有旧的写操作。我正在用异步读/异步写进行读/写。因此,服务器和客户端可能已经运行了一段时间,并来回发送了100个数据包。当我打开第二个客户端并在其上接收时,我将接收所有100个旧服务器发送的数据包!“localhost”用于ip_地址

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

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

boost::阵列buf;
boost::阵列rbuf;
boost::asio::异步写入(套接字),
boost::asio::buffer(buf.c_数组(),
buf.size()),strand.wrap(boost::bind(&async\u tcp\u client::handle\u send\u msg,
这是boost::asio::占位符::error);
boost::asio::async_read(套接字、boost::asio::buffer(rbuf.c_array()、rbuf.size()),
strand\uU.wrap(boost::bind(&async\u tcp\u client::handle\u read,
这是boost::asio::placeholders::error,
boost::asio::占位符::字节(已传输));

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

您所说的没有意义。TCP/IP是基于连接的协议,因此在一个连接上发送的数据不应出现在另一个连接上。服务器是否可能正在向所有客户端复制数据?客户是否有不同的流程?
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)));