基于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,应用层去确保通信的可靠性