如何使用asio封装的异步处理udp数据的服务类?
文章目录
前言
平时工作中会经常用到UDP收发数据,下面分享一个常用的基于asio接口的简单封装;
一、asio是什么?
asio是一个boost库中的一个组件,也可以单独引用该库,主要用于网络编程,具体大家可以百度详细说明。
这篇文章,主要分享一种简单应用,启动一个UDP服务,接收对端数据,并且可以返回数据;
二、如何使用?
1.废话不多说直接上代码
代码如下(示例):
/*usdsocket.h*/
#ifndef _UDPSOCKET_H
#define _UDPSOCKET_H
#include <iostream>
#include "boost/asio.hpp"
#include "boost/thread.hpp"
using namespace std;
using namespace boost::asio;
using namespace boost::asio::ip;
namespace BW_UDPRecv
{
/*data call back*/
typedef void (CALLBACK* LPDEAL_UDP)(unsigned char*data, int length, string & ip, int port);
typedef udp::socket udp_socket_t;
typedef std::function<void(const std::error_code, size_t)> OnSent;
class CRtpUdpServer :public std::enable_shared_from_this<CRtpUdpServer>
{
protected:
std::shared_ptr< udp_socket_t> m_socket;
udp::endpoint m_peer;
unsigned char m_sendBuf[1024];
unsigned char m_recvBuf[1024];
bool m_bindSucceed;
bool m_run;
protected:
void do_recv();
void send_data_to