udp通信类封装

c++基础应用

一.udp通信类封装

1.介绍:在实际项目应用中,我们经常会用到udp通信,最好的方法就是将其封装成特有的类,放在utils工具类中或者放在第三方基类base库中;udp通信主要的功能就是data的收与发,按照socket接口要求提供所需的ip\端口\组播地址等即可构建.

2.类的特色:

  1. 地址使用string传入;
  2. 发送使用队列逐次发送
  3. 收到数据的处理,放到具体的子类中实现;
class ABI_EXPORT CMyUdpClientSink
    {
    public:
        virtual ~CMyUdpClientSink(){}
        virtual void on_udp_client_connected(int64_t id) = 0;
        virtual void on_udp_client_disconnected(int64_t id) = 0;
        virtual void on_udp_data(int64_t id, std::vector& buf) = 0;
    };
class ABI_EXPORT CMyUdpClient : public plt::CRefAble
    {
    public:
      CUdpClient(CMyUdpClientSink *sink, int64_t id, std::string ip, int32_t port, int32_t local_port, std::string multicast_addr = "");
        virtual ~CUdpClient();
    public:
        void heartbeat(bool& busy,int32_t select_milli_seconds=0);
        void sendData(std::vector& buf);
    protected:
        bool doInit();
        bool doUninit();
        bool doConnect();
        void doCheck(bool* can_read, bool* can_write, bool* is_error, int32_t select_milli_seconds);
        bool doRead();
        bool doWrite();
    protected:
        CUdpClientSink *m_sink;
        uint64_t m_id;
        std::string m_ip;
        int32_t m_port;
        int32_t m_local_port;
        std::string m_multicast;

        typedef enum{
            STATUS_IDLE,
            STATUS_CONNECTED,
            STATUS_DISCONNECTED,
        }CStatus;
        CStatus m_status;
        SOCKET m_socket;
        sockaddr_in m_svr_addr;
        fd_set m_fds_read;
        fd_set m_fds_write;
        fd_set m_fds_error;

        char m_recv_buf[65535];

        std::list > m_to_send_datas;
        std::vector m_sending_data;
        std::vector::size_type m_sending_start_pos;
    };

二.命令解析

三.序列化

你可能感兴趣的:(udp,网络协议,网络)