2011-04-20 109 views
0

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

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

读/写调用(顺序不使用,只是复制无论是从那里我用他们的呼叫):

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

你说的没道理。 TCP/IP是基于连接的协议,因此在一个连接上发送的数据不应该出现在另一个连接上。服务器是否有可能将数据复制到所有客户端?客户是否有不同的流程? – Lou 2011-04-20 15:27:43

+1

此外,还需要更多代码。 – Lou 2011-04-20 15:28:53

回答

1

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

相关问题