ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 提升asio写/读向量

2019-09-28 03:07:43  阅读:154  来源: 互联网

标签:c vector boost-asio


我无法从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()时,它总是为空.

有人能告诉我我做错了什么吗?

马雷克

解决方法:

Asio不是序列化库.它没有序列化随机向量(你可以使用Boost Serialization).

它只是将缓冲区视为IO操作的数据缓冲区.所以,例如在第二个实例中:

std::vector<float> recv_vector;
tcp_socket.async_read_some(boost::asio::buffer(recv_vector), read_handler);

你告诉它接收适合由向量recv_vector表示的POD缓冲区的数据量,该缓冲区为空.因此,您告诉Asio接收0个字节,我认为它会为您带来愉快.

要解决问题,可以使用序列化(将责任放在另一个库的手中),也可以在实际数据之前手动发送向量的大小.

完整的演示

我在这里有更多的解释和完整的样本:How to receive a custom data type from socket read?

另外请注意,您不必做那么复杂的事情:

boost::asio::write (socket, boost::asio::buffer(&new_buffers->points.front(), nr_points * 3 * sizeof (float)));

相反,对于POD类型向量,仅为let Asio do the calculations and casts

boost::asio::write (socket, buffer(new_buffers->points));

标签:c,vector,boost-asio
来源: https://codeday.me/bug/20190928/1825383.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有