C ++:当使用boost :: asio :: async_write向客户端发送消息时,我收到与客户端相同的消息重复

时间:2015-04-25 17:06:58

标签: c++ boost-asio

这是我用来向客户端发送字符串消息的代码。我认为,这个问题与缓冲区有关。

void Client::send_message(std::string message) {
message = message + "\n";
std::ostream sending(&_out_buffer);
sending << message;
boost::asio::async_write(this->_socket, this->_out_buffer,
        boost::bind(&Client::send_callback, this,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred));

debugger( "--> Message send to " + this->_client_name + " : " + message );

}

问题在于,当我如此快速地发送一系列消息时:

//Send the data to client
    client->send_message("connected " + boost::lexical_cast<std::string>(number_of_cells));


    //Send the cells
    std::set<std::string> cells = it->second->get_names_of_all_non_empty_cells();
    std::set<std::string>::iterator cell = cells.begin();
    std::set<std::string>::iterator end = cells.end();
    for(; cell != end; cell++) {
        client->send_message("cell " + *cell + " " + it->second->get_cell_contents(*cell));
    }

我会在客户端得到这个:

  

连接2

     

连接2

     

单元格A1测试内容

     

连接2

     

单元格A1测试内容

     

细胞B4抗病毒

当我在发送代码中删除for循环时,它只发送&#34;连接的2&#34;消息一次。所以我认为这与缓冲区未正确清除或加载过快有关。我不确定。有办法处理这种情况吗?只有当我在一段代码中快速发送大量消息时才会发生这种情况。

谢谢!

编辑:

我找到了解决方法,但这并没有解决问题。而不是调用方法&#34; send_message&#34;反复地,我只是将一根大绳子拉到一起并送去。新代码:

//Send the data to client
    std::string message = "connected " + boost::lexical_cast<std::string>(number_of_cells) + "\n";


    //Send the cells
    std::set<std::string> cells = it->second->get_names_of_all_non_empty_cells();
    std::set<std::string>::iterator cell = cells.begin();
    std::set<std::string>::iterator end = cells.end();
    for(; cell != end; cell++) {
        message += "cell " + *cell + " " + it->second->get_cell_contents(*cell) +"\n";
    }

    client->send_message(message);

0 个答案:

没有答案