【无标题】

本文介绍了如何使用Boost.Asio库在C++中实现UDP通信,包括监听和接收数据的`async_receive_from`函数,以及发送数据的`send_to`函数。重点强调了UDP的非连接性质和应用层的可靠性保障,如ACK机制。
摘要由CSDN通过智能技术生成

基于boost::asio 通信原理及asio函数介绍
udp通信是无连接通信,且不对传送数据包进行可靠性保证,适用于一次传输少量数据。
数据发送和接收主要用到两个函数,如下:
函数介绍,监听接收的数据
async_receive_from(const MutableBufferSequence& buffers,
endpoint_type& sender_endpoint, socket_base::message_flags flags,
BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
使用:
char m_data[MAX_LENGTH] = { 0 };
boost::asio::ip::udp::endpoint m_ep;
async_receive_from(boost::asio::buffer(m_data), m_ep,
boost::bind(&udp_server::handle_receive_from, this,
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
接收时,m_ep获取接收方的ip和port值,用于返回的时候使用;handle_receive_from是收到数据以后回调的处理函数
数据保存在m_data中,数据长度是bytes_transferred

发送数据给目标的函数
std::size_t send_to(const ConstBufferSequence& buffers,
const endpoint_type& destination);
使用:
数据发送给目标ip和port,通过该port和ip定义endpoint,如下:
udp::endpoint ep(boost::asio::ip::address::from_string(ip), iport);
char arr[1024]={0};
//arr 给数据
send_to(boost::asio::buffer(arr, send_bytes), ep);

对于服务器端,必须绑定port,以便客户端知道服务器的port。
对于客户端,需要知道服务器的ip和port,才能正常发送
因为udp通信是非连接通信,确保数据正常接收,需要应用层去回复ack,应用层去确保通信的可靠性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值