2011-04-20 142 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

這不是我清楚你的緩衝區如何作用域。每個連接需要一個緩衝區,每個讀取和寫入都需要一個緩衝區。只要異步操作處於活動狀態,您還需要確保它們保持在範圍內。

相關問題