gpt4 book ai didi

c++ - boost::socket 只收到一条消息

转载 作者:行者123 更新时间:2023-11-30 05:30:38 28 4
gpt4 key购买 nike

我正在使用 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*/
}
}

我没有对我在此处提供的代码进行语法检查,但您应该明白这一点。

关于c++ - boost::socket 只收到一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com