boost::asio使用UDP协议通信源码实现

说明:以下源码来自参考文献[1], 比原文更丰富, 更有指导意义, 方便日后参考.

udp servr端源码

//g++ -g udp_server.cpp -o udp_server -lboost_system
//

#include <iostream>
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>

using namespace std;
using namespace boost::asio;

int main(){
    try{
        cout << "udp server start ......" << endl;
        io_service ios;

        ip::udp::socket sock(ios, ip::udp::endpoint(ip::udp::v4(), 6699));

        while(true){
            char buf[1];
            ip::udp::endpoint ep;
            boost::system::error_code ec;
            sock.receive_from(buffer(buf), ep, 0, ec);

            if(ec && ec!=error::message_size){
                throw boost::system::system_error(ec);
            }

            cout << "send to " << ep.address() << endl;
            sock.send_to(buffer("hello asio udp"), ep);
        }
    }
    catch(std::exception& e){
        cout << e.what() << endl;
    }
    return 0;
}

udp client端源码

//g++ -g udp_client.cpp -o udp_client -lboost_system
//

#include <iostream>
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>

using namespace std;
using namespace boost::asio;

int main(){
    try{
        cout << "udp client start ......" << endl;
        io_service ios;
        ip::udp::endpoint send_ep(ip::address::from_string("127.0.0.1"), 6699);

        ip::udp::socket sock(ios);
        sock.open(ip::udp::v4());

        char buf[1];
        sock.send_to(buffer(buf), send_ep);

        vector<char> v(100, 0);
        ip::udp::endpoint recv_ep;
        sock.receive_from(buffer(v), recv_ep);
        cout << "recv from " << recv_ep.address() << endl;
        cout << &v[0] << endl;
    }
    catch(exception& e){
        cerr << e.what() << endl;
    }
    return 0;
}

运行截图



参考文献

[1].罗剑锋, Boost程序库完全开发指南---深入C++"准"标准库

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值