我正在尝试使用 boost asio 库来实现网络编程。这是一些数据(以“##”结尾)到达端点时调用的代码。
{
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##”,另一次是空字符串。
有人能告诉我是什么原因以及如何解决吗?