创建二进制数据 iostream
Create binary data iostream
我是 C++ 的新手,我正在学习使用 boost::asio 进行网络编程以处理传入的二进制数据。我来自嵌入式 C,在那里我会使用固定缓冲区读取为从网络套接字接收的位和字节编写打包器和解包器。
我想了解 iostream。要从 boost::asio 中的网络套接字读取二进制数据,我正在使用 streambuf。
是否可以开发一个 iostream 从流中读取数据类型并使用它们?
从 std::basic_streambuf 继承子类的正确方法是什么?然后使用我的数据类型使用流中的数据。我不需要定义固定大小的缓冲区来执行读取。
我不太明白该怎么做。能否指出一个合适的例子来说明我需要做什么。
我这样做主要是为了提高我的 C++ 技能的学习经验?
谢谢
电社
不要继承 asio::streambuf
。
相反,使用可流类型或例如提升序列化档案(boost::archive::text_oarchive
和 boost::archive::text_iarchive
)或类似的东西。这是相当高级的,允许您序列化完整的对象图,包括多态类型和(循环)关系。
遗憾的是,Boost Serialization 不提供简单的框架协议,因此您的协议应该为每条消息期望新的连接,或者在其之上添加框架协议。
样本很多。从这里开始,也许:
- sending/receiving a struct in boost::asio
- 还有很多很多https://whosebug.com/search?q=%5Bboost-asio%5D+serialization
PS。注意其他选项
- 更简单的 POD 方法
boost::asio::buffer
直接
- 麦片、Cap'n-Proto、protobuf 等
我是 C++ 的新手,我正在学习使用 boost::asio 进行网络编程以处理传入的二进制数据。我来自嵌入式 C,在那里我会使用固定缓冲区读取为从网络套接字接收的位和字节编写打包器和解包器。
我想了解 iostream。要从 boost::asio 中的网络套接字读取二进制数据,我正在使用 streambuf。
是否可以开发一个 iostream 从流中读取数据类型并使用它们?
从 std::basic_streambuf 继承子类的正确方法是什么?然后使用我的数据类型使用流中的数据。我不需要定义固定大小的缓冲区来执行读取。
我不太明白该怎么做。能否指出一个合适的例子来说明我需要做什么。
我这样做主要是为了提高我的 C++ 技能的学习经验?
谢谢
电社
不要继承 asio::streambuf
。
相反,使用可流类型或例如提升序列化档案(boost::archive::text_oarchive
和 boost::archive::text_iarchive
)或类似的东西。这是相当高级的,允许您序列化完整的对象图,包括多态类型和(循环)关系。
遗憾的是,Boost Serialization 不提供简单的框架协议,因此您的协议应该为每条消息期望新的连接,或者在其之上添加框架协议。
样本很多。从这里开始,也许:
- sending/receiving a struct in boost::asio
- 还有很多很多https://whosebug.com/search?q=%5Bboost-asio%5D+serialization
PS。注意其他选项
- 更简单的 POD 方法
boost::asio::buffer
直接 - 麦片、Cap'n-Proto、protobuf 等