我是Boost新手。我正在開發一個小服務器。當客戶端向我的服務器發送消息時,我遇到了問題。我的服務器調用函數的套接字上讀兩遍Boost Asio插座問題
這是我的客戶端類
void ClientManager::ToRecv(void)
{
this->_socket.async_read_some(boost::asio::buffer(_buffer),
_strand.wrap(boost::bind(&ClientManager::HandleRead, this, boost::asio::placeholders::error))
);
}
void ClientManager::HandleRead(boost::system::error_code const & error)
{
_mutex.lock();
std::cout << boost::this_thread::get_id() << " client->HandleRead()" << std::endl;
for (unsigned int i = 0; i < _buffer.size(); ++i)
{
std::cout << _buffer[i]; // I display the message
}
std::cout << std::endl;
_mutex.unlock();
this->ToRecv();
}
代碼當客戶端連接,我調用start功能。這是當我啓動我的服務器時在控制檯中顯示的內容:
我創建了3個主題。
Server Connect
[004FE200] Thread Start
[004FE238] Thread Start
[004FE7C8] Thread Start
,這是當我油灰客戶端連接到我的服務器
[004FE7C8] acceptor->NewClient()
[004FE7C8] client->Start()
,這是當客戶送什麼我的服務器顯示「Hello World」。
[004FE238] client->HandleRead()
hello world
[004FE7C8] client->HandleRead()
llo world
_buffer是一個boost ::陣列<炭,緩衝區大小>類型。 – RottenRonin
我遵循你的建議,現在我的服務器不會顯示相同的消息兩次,但服務器再次調用HandleRead函數兩次。 – RottenRonin
我該如何避免HandleRead的第二次調用? – RottenRonin