我无法从boost asio缓冲区读取矢量 . 我有这个向量:
std::vector<float> points;
我发送它与提升asio写
boost::asio::write (socket, boost::asio::buffer(&new_buffers->points.front(), nr_points * 3 * sizeof (float)));
另一方面,我有:
std::vector<float> recv_vector;
tcp_socket.async_read_some(boost::asio::buffer(recv_vector), read_handler);
当我做 recv_vector.size()
时,它总是空着的 .
有人能告诉我我做错了什么吗?
马雷克
1 回答
Asio不是序列化库 . 它没有序列化随机向量(你可以使用Boost Serialization) .
它只是将缓冲区视为IO操作的数据缓冲区 . 所以,例如在第二个实例中:
你告诉它接收适合由向量
recv_vector
表示的POD缓冲区的数据量,该缓冲区为空 . 因此,您告诉Asio接收0个字节,我认为它会为您带来愉快 .要解决问题,可以使用序列化(将责任放在另一个库的手中),也可以在实际数据之前手动发送向量的大小 .
完整演示
我在这里有更多的解释和完整的样本:How to receive a custom data type from socket read?
另外请注意,您不必做那么复杂的事情:
相反,对于POD类型向量,只需let Asio do the calculations and casts: