ICode9

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

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

2019-09-03 04:06:24  阅读:244  来源: 互联网

标签:c boost-asio


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

我过去使用过Qt QDataStream,效果很好;我相信提升有相当的东西吗?

解决方法:

#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
来源: https://codeday.me/bug/20190903/1795583.html

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

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

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

ICode9版权所有