[英]boost::socket receives only one message
我正在使用boost::asio
編寫簡單的服務器。 目前,我已經准備好接收數據的服務器部分。 但是我有問題。 Boost::asio
僅接收一條消息(我的客戶端程序發送了多條消息)。
收到消息后,我必須做些什么才能能夠接收來自同一客戶端的另一條消息?
TCPConnection::TCPConnection(boost::asio::io_service& io_service)
: socket_(io_service),
socketActive(true)
{
Traces() << "\n" << "LOG: TCPConnection::TCPConnection(boost::asio::io_service& io_service) : socket_(io_service)";
}
void TCPConnection::Start()
{
Traces() << "\n" << "LOG: void TCPConnection::Start()";
socket_.async_read_some(boost::asio::buffer(buffer_),
boost::bind(&TCPConnection::HandleRead, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void TCPConnection::HandleRead(const boost::system::error_code& e,
std::size_t bytes_transferred)
{
Traces() << "\n" << "LOG: void TCPConnection::HandleRead(const boost::system::error_code& e, std::size_t bytes_transferred)";
if (!e)
{
Traces() << "\n" << "LOG: New message";
Message tempMessage;
tempMessage.CopyData((boost::shared_ptr<TCPConnection>)this, buffer_.data());
messageQueue->PushBack(tempMessage);
}
else if (e != boost::asio::error::operation_aborted)
{
Traces() << "\n" << "LOG: Close connection";
this->Stop();
}
}
每次成功讀取數據時,都需要請求io_service
/ socket
再次處理讀取的數據。 我通常的解決方案如下所示:
void handle_read(asio::error_code ec, size_t bytes_read) {
if(!ec) {
/*Do Stuff*/
socket.async_read(/*buffer*/, handle_read);
} else {
/*Error handling*/
}
}
我沒有語法檢查我在這里提供的代碼,但是您應該有正確的主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.