我想使用boost ASIO庫來實現網絡編程。 下面是當一些數據(其與「##」結束時)到達端點這就是所謂的代碼。async_read_until處理程序調用兩次
{
boost::asio::async_read_until(m_socket, m_response,
std::string("##"),
boost::bind(&CTcpClient::HandleReceive,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void CTcpClient::HandleReceive(const ErrorCodeType p_errorCode, size_t p_length)
{
IN_FUNCTION
if (!p_errorCode)
{
logInfo(STR("Data received ..."));
boost::asio::async_read_until(m_socket, m_response,
std::string("##"),
boost::bind(&CTcpClient::HandleReceive,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
m_onReceiveSignal(sbuf2s(m_response));
}
else
{
Shutdown(p_errorCode);
}
OUT_FUNCTION
}
比方說,發送到終點的數據是「KINGS ##」。因此,Handlereceive應該被調用一次。但在我的代碼中,這被稱爲兩次,一次是「KINGS ##」,另一次是空字符串。
有人能告訴我是什麼原因,如何解決?
什麼是'm_response'的類型? –
m_response是升壓::支持ASIO ::流緩衝類型。 –