我正在实现一个使用boost向客户端发送xml的服务器。我面临的问题是缓冲区不会立即发送并累积到一个点然后发送整个事情。这在我的客户端导致了一个问题,当它解析xml时,它可能有不完整的xml标记(不完整的消息)。有什么方法可以在需要发送消息时刷新套接字?以下是服务器的写入代码。如何使用boost刷新套接字
void
ClientConnection::handle_write(const boost::system::error_code& error)
{
if (!error)
{
m_push_message_queue.pop_front();
if (!m_push_message_queue.empty() && !m_disconnected)
{
boost::asio::async_write(m_socket,
boost::asio::buffer(m_push_message_queue.front().data(),
m_push_message_queue.front().length()),
boost::bind(&ClientConnection::handle_write, this,
boost::asio::placeholders::error));
}
}
else
{
std::err << "Error writting out message...\n";
m_disconnected = true;
m_server->DisconnectedClient (this);
}
}
使服务器在第一个数据包中发送XML的大小。在客户端,读取并减少N(N是每次读取的字节数)。当值达到0时,XML已完成并准备好进行分析。 – jweyrich 2010-07-29 01:57:20