gpt4 book ai didi

c++ - 如何使用 boost::asio 发送原始二进制数据

转载 作者:太空狗 更新时间:2023-10-29 20:46:54 24 4
gpt4 key购买 nike

我正在使用 boost::asio 编写一个 TCP 客户端。我想以二进制表示形式发送一组 float 。 boost 是否提供了一种将数据转换为二进制表示形式以便将其放置在 boost::array 或其他东西中的好方法?

我过去使用过 Qt QDataStream 并且运行良好;我确定 boost 有等效的东西?

最佳答案

#include <boost/asio.hpp>

#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>

#include <iostream>

int
main( unsigned argc, char** argv )
{
if ( argc < 3 ) {
std::cerr << "usage: " << argv[0] << " host port" << std::endl;
exit( EXIT_FAILURE );
}

boost::array<float, 5> foo = {1.0, 2.0, 3.0, 4.0, 5.0};
BOOST_FOREACH( const float i, foo ) {
std::cout << i << std::endl;
}

boost::asio::io_service ios;
boost::asio::ip::tcp::socket socket( ios );
socket.connect(
boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string( argv[1] ),
boost::lexical_cast<unsigned>( argv[2] )
)
);

const size_t bytes = boost::asio::write(
socket,
boost::asio::buffer( foo )
);
std::cout << "sent " << bytes << " bytes" << std::endl;
}

编译

bash-3.2$ g++ -I /opt/local/include -L/opt/local/lib -lboost_system -Wl,-rpath,/opt/local/lib array.cc

运行

bash-3.2$ ./a.out 127.0.0.1 1234
1
2
3
4
5
sent 20 bytes
bash-3.2$

服务器

bash-3.2$ nc -l 1234 | hexdump -b
0000000 000 000 200 077 000 000 000 100 000 000 100 100 000 000 200 100
0000010 000 000 240 100
0000014
bash-3.2$

关于c++ - 如何使用 boost::asio 发送原始二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6866078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com